zoukankan      html  css  js  c++  java
  • collectionview cell吸顶效果

     

    #import "MyFlowLayout.h"

     

    @implementation MyFlowLayout

    #define kWidth self.collectionView.frame.size.width

    - (instancetype)init

    {

        if (self = [super init]) {

            // 设置item估计值

            self.estimatedItemSize = CGSizeMake(300, 100);

            // 全局配置item尺寸,单独定义调用协议方法[sizeForItemAtIndexPath]

            self.itemSize = CGSizeMake(300, 100);

            // 全局配置每行之间的间距,单独定义可调用协议方法[minimumLineSpacingForSectionAtIndex]

            self.minimumLineSpacing = 10;

            // 全局配置每行内部item的间距,单独定义可调用协议方法[minimumInteritemSpacingForSectionAtIndex]

            self.minimumInteritemSpacing = 0;

           

            // 设置滚动方向

            // UICollectionViewScrollDirectionVertical

            // UICollectionViewScrollDirectionHorizontal

            self.scrollDirection = UICollectionViewScrollDirectionVertical;

            // 设置是否当元素超出屏幕之后固定头部视图位置,默认NO;

            self.sectionHeadersPinToVisibleBounds = YES;

            // 设置是否当元素超出屏幕之后固定尾部视图位置,默认NO;

            self.sectionFootersPinToVisibleBounds = YES;

        }

        return self;

    }

     

    - (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect

    {

        // 拿到可见区域布局属性

        NSArray *arr = [super layoutAttributesForElementsInRect:rect];

        // 处理当前可见区内的布局属性吸顶

        [arr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

            [self recomputeCellAttribute:obj];

        }];

        return arr;

    }

     

    - (void)recomputeCellAttribute:(UICollectionViewLayoutAttributes *)attrib

    {

        // 获得悬停的Y值

        CGFloat minY = CGRectGetMinY(self.collectionView.bounds) + self.collectionView.contentInset.top;

    //拿到布局属性应该出现的位置

        CGFloat finalY = MAX(minY, attrib.frame.origin.y);

        CGPoint point = attrib.frame.origin;

        point.y = finalY;

        attrib.frame = (CGRect){point,attrib.frame.size};

    //根据IndexPath设置zIndex能确立顶部悬停的cell被后来的cell覆盖的层级关系

        attrib.zIndex = attrib.indexPath.row;

    }

     

    - (NSArray<NSString *>*)arrStr

    {

        return @[@"f",@1];

    }

     

    - (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds

    {

        return YES;

    }

    @end

  • 相关阅读:
    有效的形成传感器(执行器)的控制方式
    QT进行多传感器(执行器)的编程框架
    Pytorch 分割模型构建和训练【直播】2019 年县域农业大脑AI挑战赛---(四)模型构建和网络训练
    9月份以前还是深入了解各个技术原理吧
    位操作基础篇
    实现一个简单实用的动态加载上千条目的UGUI模块
    C++题目汇总
    Leetcode 92. Reverse Linked List II
    Leetcode Reverse Linked List
    Lintcode Recover Rotated Sorted Array
  • 原文地址:https://www.cnblogs.com/Keys/p/6179456.html
Copyright © 2011-2022 走看看