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

  • 相关阅读:
    jQuery的简单应用
    JQuery事件
    [django]数据导出excel升级强化版(很强大!)
    [Django]用户权限学习系列之权限管理界面实现
    [Django]用户权限学习系列之设计自有权限管理系统设计思路
    [jquery]显示隐藏div标签的几种方法
    [Django]用户权限学习系列之User权限基本操作指令
    [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)
    [Django]用户权限学习系列之Permission权限基本操作指令
    [python]set集合学习
  • 原文地址:https://www.cnblogs.com/Keys/p/6179456.html
Copyright © 2011-2022 走看看