美文网首页< UIKit >
UICollectionViewFlowLayout

UICollectionViewFlowLayout

作者: zhYx_ | 来源:发表于2019-06-13 17:30 被阅读0次
    
    #if USE_UIKIT_PUBLIC_HEADERS || !__has_include(<UIKitCore/UICollectionViewFlowLayout.h>)
    //
    //  UICollectionViewFlowLayout.h
    //  UIKit
    //
    //  Copyright (c) 2011-2018 Apple Inc. All rights reserved.
    //
    
    #import <UIKit/UICollectionViewLayout.h>
    #import <UIKit/UICollectionView.h>
    #import <UIKit/UIKitDefines.h>
    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    UIKIT_EXTERN NSString *const UICollectionElementKindSectionHeader NS_AVAILABLE_IOS(6_0);
    UIKIT_EXTERN NSString *const UICollectionElementKindSectionFooter NS_AVAILABLE_IOS(6_0);
    UIKIT_EXTERN const CGSize UICollectionViewFlowLayoutAutomaticSize NS_AVAILABLE_IOS(10_0);
    
    
    
    /* 布局滚动方向 <枚举> */
    typedef NS_ENUM(NSInteger, UICollectionViewScrollDirection) {
        UICollectionViewScrollDirectionVertical,    /// 垂直滚动
        UICollectionViewScrollDirectionHorizontal   /// 水平滚动
    };
    
    /* 参考布局 <枚举> */
    typedef NS_ENUM(NSInteger, UICollectionViewFlowLayoutSectionInsetReference) {
        UICollectionViewFlowLayoutSectionInsetFromContentInset, /// 延内容布局(默认)
        UICollectionViewFlowLayoutSectionInsetFromSafeArea,     /// 延SafeArea布局
        UICollectionViewFlowLayoutSectionInsetFromLayoutMargins /// 延边距布局
    } API_AVAILABLE(ios(11.0), tvos(11.0)) API_UNAVAILABLE(watchos);
    
    
    
    
    
    #pragma mark - 集合视图流布局无效上下文 Class
    #pragma mark -
    /*
     - 通过使上下文无效(Invalidation Contexts)来优化布局
     - 通过子类化 UICollectionViewLayoutInvalidationContext,为你的布局定义一个 自定义的 invalidation context。在子类中定义一些属性,这些属性代表布局中可以单独重新计算的数据。当你需要 invalidate 你的布局时,创建一个 invalidation context 子类的实例,配置自定义的属性,并把该实例传给invalidateLayoutWithContext: 方法。你自定义的方法可以根据invalidation context 中的信息重新计算布局改变的部分。
     - 如果你定义了一个自定义的 invalidation context 类,你也应该重载invalidationContextClass方法,返回自定义的类。 collection view 在需要invalidation context时,总是会创建一个指明的类实例。返回你自定义的子类,确保了自定义的对象拥有正确的 invalidation context。
     */
    NS_CLASS_AVAILABLE_IOS(7_0) @interface UICollectionViewFlowLayoutInvalidationContext : UICollectionViewLayoutInvalidationContext
    /// 如果设置为NO,流布局不会重新查询集合视图委托的大小信息等
    @property (nonatomic) BOOL invalidateFlowLayoutDelegateMetrics;
    /// 如果设置为NO,流布局将保留所有布局信息,实际上不会失效(对于仅使一部分自身无效的子类很有用)
    @property (nonatomic) BOOL invalidateFlowLayoutAttributes;
    @end
    
    
    
    
    
    ///!!!: 流布局代理 <协议>
    @protocol UICollectionViewDelegateFlowLayout <UICollectionViewDelegate>
    @optional
    // 设置 指定Item的尺寸
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
    // 设置 指定组的Item内边距
    - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
    // 设置 指定组的Item最小行间距
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section;
    // 设置 指定组的Item最小列间距
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;
    // 设置 指定组的组头尺寸
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section;
    // 设置 指定组的组尾尺寸
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section;
    @end
    
    
    
    
    
    #pragma mark - 集合视图流布局 Class
    #pragma mark -
    NS_CLASS_AVAILABLE_IOS(6_0) @interface UICollectionViewFlowLayout : UICollectionViewLayout
    /// 最小行间距
    @property (nonatomic) CGFloat minimumLineSpacing;
    /// 最小列间距
    @property (nonatomic) CGFloat minimumInteritemSpacing;
    /// Item尺寸
    @property (nonatomic) CGSize itemSize;
    /// 预估Item尺寸(非0会调用-preferredLayoutAttributesFittingAttributes:方法;默认:CGSizeZero)
    @property (nonatomic) CGSize estimatedItemSize NS_AVAILABLE_IOS(8_0);
    /// 滚动方向(默认:UICollectionViewScrollDirectionVertical)
    @property (nonatomic) UICollectionViewScrollDirection scrollDirection;
    /// 组头尺寸
    @property (nonatomic) CGSize headerReferenceSize;
    /// 组尾尺寸
    @property (nonatomic) CGSize footerReferenceSize;
    /// Item内边距
    @property (nonatomic) UIEdgeInsets sectionInset;
    /// 参考布局(默认:UICollectionViewFlowLayoutSectionInsetFromContentInset)
    @property (nonatomic) UICollectionViewFlowLayoutSectionInsetReference sectionInsetReference API_AVAILABLE(ios(11.0), tvos(11.0)) API_UNAVAILABLE(watchos);
    /// 组头是否悬停
    @property (nonatomic) BOOL sectionHeadersPinToVisibleBounds NS_AVAILABLE_IOS(9_0);
    /// 组尾是否悬停
    @property (nonatomic) BOOL sectionFootersPinToVisibleBounds NS_AVAILABLE_IOS(9_0);
    @end
    
    
    
    
    
    NS_ASSUME_NONNULL_END
    
    #else
    #import <UIKitCore/UICollectionViewFlowLayout.h>
    #endif
    
    

    相关文章

      网友评论

        本文标题:UICollectionViewFlowLayout

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