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

  • 相关阅读:
    DataTable 只保留想要的几列
    如何用多个字符串来切分字符串
    用.net 发送邮件
    sqlserver 行列转换
    sql面试题一 学生成绩
    将DataReader转换为DataTable
    C# 如何用多个字符串来切分字符串并去除空格
    SqlServer按时间自动生成生成单据编号
    实验一 Java开发环境的熟悉
    Java学习笔记心得——初识Java
  • 原文地址:https://www.cnblogs.com/Keys/p/6179456.html
Copyright © 2011-2022 走看看