mirror of
https://github.com/wu736139669/Ash_AWord.git
synced 2026-08-06 06:15:20 +00:00
116 lines
5.7 KiB
Objective-C
116 lines
5.7 KiB
Objective-C
//
|
|
// PSTCollectionViewFlowLayout.h
|
|
// PSPDFKit
|
|
//
|
|
// Copyright (c) 2012-2013 Peter Steinberger. All rights reserved.
|
|
//
|
|
|
|
#import "PSTCollectionViewLayout.h"
|
|
|
|
extern NSString *const PSTCollectionElementKindSectionHeader;
|
|
extern NSString *const PSTCollectionElementKindSectionFooter;
|
|
|
|
typedef NS_ENUM(NSInteger, PSTCollectionViewScrollDirection) {
|
|
PSTCollectionViewScrollDirectionVertical,
|
|
PSTCollectionViewScrollDirectionHorizontal
|
|
};
|
|
|
|
@protocol PSTCollectionViewDelegateFlowLayout <PSTCollectionViewDelegate>
|
|
@optional
|
|
|
|
- (CGSize)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
|
|
- (UIEdgeInsets)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
|
|
- (CGFloat)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section;
|
|
- (CGFloat)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;
|
|
- (CGSize)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section;
|
|
- (CGSize)collectionView:(PSTCollectionView *)collectionView layout:(PSTCollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section;
|
|
|
|
@end
|
|
|
|
@class PSTGridLayoutInfo;
|
|
|
|
@interface PSTCollectionViewFlowLayout : PSTCollectionViewLayout
|
|
|
|
@property (nonatomic) CGFloat minimumLineSpacing;
|
|
@property (nonatomic) CGFloat minimumInteritemSpacing;
|
|
@property (nonatomic) CGSize itemSize; // for the cases the delegate method is not implemented
|
|
@property (nonatomic) PSTCollectionViewScrollDirection scrollDirection; // default is PSTCollectionViewScrollDirectionVertical
|
|
@property (nonatomic) CGSize headerReferenceSize;
|
|
@property (nonatomic) CGSize footerReferenceSize;
|
|
|
|
@property (nonatomic) UIEdgeInsets sectionInset;
|
|
|
|
/*
|
|
Row alignment options exits in the official UICollectionView, but hasn't been made public API.
|
|
|
|
Here's a snippet to test this on UICollectionView:
|
|
|
|
NSMutableDictionary *rowAlign = [[flowLayout valueForKey:@"_rowAlignmentsOptionsDictionary"] mutableCopy];
|
|
rowAlign[@"UIFlowLayoutCommonRowHorizontalAlignmentKey"] = @(1);
|
|
rowAlign[@"UIFlowLayoutLastRowHorizontalAlignmentKey"] = @(3);
|
|
[flowLayout setValue:rowAlign forKey:@"_rowAlignmentsOptionsDictionary"];
|
|
*/
|
|
@property (nonatomic, strong) NSDictionary *rowAlignmentOptions;
|
|
|
|
@end
|
|
|
|
// @steipete addition, private API in UICollectionViewFlowLayout
|
|
extern NSString *const PSTFlowLayoutCommonRowHorizontalAlignmentKey;
|
|
extern NSString *const PSTFlowLayoutLastRowHorizontalAlignmentKey;
|
|
extern NSString *const PSTFlowLayoutRowVerticalAlignmentKey;
|
|
|
|
typedef NS_ENUM(NSInteger, PSTFlowLayoutHorizontalAlignment) {
|
|
PSTFlowLayoutHorizontalAlignmentLeft,
|
|
PSTFlowLayoutHorizontalAlignmentCentered,
|
|
PSTFlowLayoutHorizontalAlignmentRight,
|
|
PSTFlowLayoutHorizontalAlignmentJustify // 3; default except for the last row
|
|
};
|
|
// TODO: settings for UIFlowLayoutRowVerticalAlignmentKey
|
|
|
|
|
|
/*
|
|
@interface PSTCollectionViewFlowLayout (Private)
|
|
|
|
- (CGSize)synchronizeLayout;
|
|
|
|
// For items being inserted or deleted, the collection view calls some different methods, which you should override to provide the appropriate layout information.
|
|
- (PSTCollectionViewLayoutAttributes *)initialLayoutAttributesForFooterInInsertedSection:(NSInteger)section;
|
|
- (PSTCollectionViewLayoutAttributes *)initialLayoutAttributesForHeaderInInsertedSection:(NSInteger)section;
|
|
- (PSTCollectionViewLayoutAttributes *)initialLayoutAttributesForInsertedItemAtIndexPath:(NSIndexPath *)indexPath;
|
|
- (PSTCollectionViewLayoutAttributes *)finalLayoutAttributesForFooterInDeletedSection:(NSInteger)section;
|
|
- (PSTCollectionViewLayoutAttributes *)finalLayoutAttributesForHeaderInDeletedSection:(NSInteger)section;
|
|
- (PSTCollectionViewLayoutAttributes *)finalLayoutAttributesForDeletedItemAtIndexPath:(NSIndexPath *)indexPath;
|
|
|
|
- (void)_updateItemsLayout;
|
|
- (void)_getSizingInfos;
|
|
- (void)_updateDelegateFlags;
|
|
|
|
- (PSTCollectionViewLayoutAttributes *)layoutAttributesForFooterInSection:(NSInteger)section;
|
|
- (PSTCollectionViewLayoutAttributes *)layoutAttributesForHeaderInSection:(NSInteger)section;
|
|
- (PSTCollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath usingData:(id)data;
|
|
- (PSTCollectionViewLayoutAttributes *)layoutAttributesForFooterInSection:(NSInteger)section usingData:(id)data;
|
|
- (PSTCollectionViewLayoutAttributes *)layoutAttributesForHeaderInSection:(NSInteger)section usingData:(id)data;
|
|
|
|
- (id)indexesForSectionFootersInRect:(CGRect)rect;
|
|
- (id)indexesForSectionHeadersInRect:(CGRect)rect;
|
|
- (id)indexPathsForItemsInRect:(CGRect)rect usingData:(id)arg2;
|
|
- (id)indexesForSectionFootersInRect:(CGRect)rect usingData:(id)arg2;
|
|
- (id)indexesForSectionHeadersInRect:(CGRect)arg1 usingData:(id)arg2;
|
|
- (CGRect)_frameForItemAtSection:(int)arg1 andRow:(int)arg2 usingData:(id)arg3;
|
|
- (CGRect)_frameForFooterInSection:(int)arg1 usingData:(id)arg2;
|
|
- (CGRect)_frameForHeaderInSection:(int)arg1 usingData:(id)arg2;
|
|
- (void)_invalidateLayout;
|
|
- (NSIndexPath *)indexPathForItemAtPoint:(CGPoint)arg1;
|
|
- (PSTCollectionViewLayoutAttributes *)_layoutAttributesForItemsInRect:(CGRect)arg1;
|
|
- (CGSize)collectionViewContentSize;
|
|
- (void)finalizeCollectionViewUpdates;
|
|
- (void)_invalidateButKeepDelegateInfo;
|
|
- (void)_invalidateButKeepAllInfo;
|
|
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)arg1;
|
|
- (id)layoutAttributesForElementsInRect:(CGRect)arg1;
|
|
- (void)invalidateLayout;
|
|
- (id)layoutAttributesForItemAtIndexPath:(id)arg1;
|
|
|
|
@end
|
|
*/
|