#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
网友评论