美文网首页
UICollectionView的使用(4)--UICollec

UICollectionView的使用(4)--UICollec

作者: 雅之上善若水 | 来源:发表于2017-07-27 16:10 被阅读238次

    UICollectionViewFlowLayout 是系统提供的具体布局对象,是UICollectionViewLayout这个抽象类的子类.

    1.UICollectionViewFlowLayout

    NS_CLASS_AVAILABLE_IOS(6_0) @interface UICollectionViewFlowLayout : UICollectionViewLayout
    
    @property (nonatomic) CGFloat minimumLineSpacing; // 最小行间距
    @property (nonatomic) CGFloat minimumInteritemSpacing; // 最小列间距
    @property (nonatomic) CGSize itemSize; // item的尺寸
    // 预估高度
    @property (nonatomic) CGSize estimatedItemSize NS_AVAILABLE_IOS(8_0); // defaults to CGSizeZero - setting a non-zero size enables cells that self-size via -preferredLayoutAttributesFittingAttributes: 
    @property (nonatomic) UICollectionViewScrollDirection scrollDirection; // default is UICollectionViewScrollDirectionVertical // 滚动方向
    @property (nonatomic) CGSize headerReferenceSize; // 作为头追加视图的尺寸
    @property (nonatomic) CGSize footerReferenceSize; // 作为脚追加视图的尺寸
    @property (nonatomic) UIEdgeInsets sectionInset;  // section 内边距
    
    #TODO:section 内的内容滚动时,header/footer是否驻留
    // Set these properties to YES to get headers that pin to the top of the screen and footers that pin to the bottom while scrolling (similar to UITableView).
    // header 是否驻留
    @property (nonatomic) BOOL sectionHeadersPinToVisibleBounds NS_AVAILABLE_IOS(9_0);
    // footer 是否驻留
    @property (nonatomic) BOOL sectionFootersPinToVisibleBounds NS_AVAILABLE_IOS(9_0);
    
    @end
    

    2. UICollectionViewDelegateFlowLayout

    UICollectionViewFlowLayout的属性都是可以设置每个 item、footer和header的size等功能,但是要是对于想设置特定section或者item等就不行。使用代理,可以具体到每一个item、footer和header等。

    @protocol UICollectionViewDelegateFlowLayout <UICollectionViewDelegate>
    @optional
    // 设置item的size
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
    // 以section为边距, 设置内边距
    - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
    // 以section为单位,设置同一行两个item的最小间距
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section;
    // 以section为单位,设置同一列两个item的最小间距
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;
    // 设置header的size
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section;
    // 设置footer的size
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section;
    
    @end
    

    3.UICollectionViewFlowLayoutInvalidationContext

    一组属性,用于确定是否重新计算item的大小或其在布局中的位置。

    NS_CLASS_AVAILABLE_IOS(7_0) @interface UICollectionViewFlowLayoutInvalidationContext : UICollectionViewLayoutInvalidationContext
    
    // 指示是否重新计算布局中项目和视图的大小
    @property (nonatomic) BOOL invalidateFlowLayoutDelegateMetrics; // if set to NO, flow layout will not requery the collection view delegate for size information etc.
    // 指示是否重新计算布局中项目和视图的布局属性。
    @property (nonatomic) BOOL invalidateFlowLayoutAttributes; // if set to NO, flow layout will keep all layout information, effectively not invalidating - useful for a subclass which invalidates only a piece of itself
    
    @end
    

    4. UICollectionViewScrollDirection

    UICollectionViewFlowLayout 的滚动方向只能是水平和垂直两种。

    typedef NS_ENUM(NSInteger, UICollectionViewScrollDirection) {
        UICollectionViewScrollDirectionVertical,
        UICollectionViewScrollDirectionHorizontal
    };
    

    ps :关于同一行的两个item的最小边距和同一列的两个item最小列边距。

    因为每行内的item个数是不定的,因为会尽量在一行内排更多数据,当然之间的间距不能小于最小的间距,而FlowLayout 的实现是两端对齐,同时保持一列中的cell间距相等。
    如题

    1054014-0784d3841ff27872.png

    可以看到,一列中的cell总是两端和collectionView对齐,cell之间的间隔一致。

    不错的博客:
    为UICollectionViewFlowLayout添加maximumInteritemSpacing

    相关文章

      网友评论

          本文标题:UICollectionView的使用(4)--UICollec

          本文链接:https://www.haomeiwen.com/subject/ogmzkxtx.html