// // 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 @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 */