< UIKit >

UICollectionViewFlowLayout

2019-06-13  本文已影响0人  zhYx_

#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

上一篇 下一篇

猜你喜欢

热点阅读