Handle initial sizing delegate implementation in flow layout inspector

This commit is contained in:
Levi McCallum 2015-10-06 09:26:23 -07:00
parent 34f3065825
commit 8efca60bac
3 changed files with 42 additions and 14 deletions

View File

@ -228,12 +228,7 @@ static BOOL _isInterceptedSelector(SEL sel)
// Register the default layout inspector delegate for flow layouts, custom layouts
// will need to roll their own ASCollectionViewLayoutInspecting implementation.
if ([layout asdk_isFlowLayout]) {
_flowLayoutInspector = [[ASCollectionViewFlowLayoutInspector alloc] init];
_flowLayoutInspector.layout = (UICollectionViewFlowLayout *)layout;
_flowLayoutInspector.collectionView = self;
_layoutDelegate = _flowLayoutInspector;
}
_layoutDelegate = [self flowLayoutInspector];
_registeredSupplementaryKinds = [NSMutableArray array];
@ -252,6 +247,21 @@ static BOOL _isInterceptedSelector(SEL sel)
super.dataSource = nil;
}
/**
* A layout inspector implementation specific for the sizing behavior of UICollectionViewFlowLayouts
*
* @discussion Will return nil if the current layout is not a flow layout
*/
- (ASCollectionViewFlowLayoutInspector *)flowLayoutInspector
{
if (_flowLayoutInspector == nil) {
UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)self.collectionViewLayout;
_flowLayoutInspector = [[ASCollectionViewFlowLayoutInspector alloc] initWithCollectionView:self
flowLayout:layout];
}
return _flowLayoutInspector;
}
#pragma mark -
#pragma mark Overrides.
@ -326,6 +336,8 @@ static BOOL _isInterceptedSelector(SEL sel)
super.delegate = (id<UICollectionViewDelegate>)_proxyDelegate;
_asyncDelegateImplementsInsetSection = ([_asyncDelegate respondsToSelector:@selector(collectionView:layout:insetForSectionAtIndex:)] ? 1 : 0);
}
_flowLayoutInspector.collectionView = self;
}
- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType

View File

@ -33,8 +33,10 @@
@interface ASCollectionViewFlowLayoutInspector : NSObject <ASCollectionViewLayoutInspecting>
@property (nonatomic, weak) ASCollectionView *collectionView;
@property (nonatomic, weak) UICollectionViewFlowLayout *layout;
@property (nonatomic, weak) ASCollectionView *collectionView;
- (instancetype)initWithCollectionView:(ASCollectionView *)collectionView flowLayout:(UICollectionViewFlowLayout *)flowLayout;
- (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSizeForSupplementaryNodeOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath;

View File

@ -19,11 +19,25 @@
#pragma mark - Accessors
- (void)setLayout:(UICollectionViewFlowLayout *)layout
- (instancetype)initWithCollectionView:(ASCollectionView *)collectionView flowLayout:(UICollectionViewFlowLayout *)flowLayout
{
_layout = layout;
_delegateImplementsReferenceSizeForHeader = [[self layoutDelegate] respondsToSelector:@selector(collectionView:layout:referenceSizeForHeaderInSection:)];
_delegateImplementsReferenceSizeForFooter = [[self layoutDelegate] respondsToSelector:@selector(collectionView:layout:referenceSizeForFooterInSection:)];
if (flowLayout == nil) {
return nil;
}
self = [super init];
if (self != nil) {
self.collectionView = collectionView;
_layout = flowLayout;
}
return self;
}
- (void)setCollectionView:(ASCollectionView *)collectionView
{
_collectionView = collectionView;
_delegateImplementsReferenceSizeForHeader = [[self layoutDelegate] respondsToSelector:@selector(collectionView:layout:referenceSizeForHeaderInSection:)];
_delegateImplementsReferenceSizeForFooter = [[self layoutDelegate] respondsToSelector:@selector(collectionView:layout:referenceSizeForFooterInSection:)];
}
#pragma mark - ASCollectionViewLayoutInspecting
@ -94,9 +108,9 @@
}
}
- (id<UICollectionViewDelegateFlowLayout>)layoutDelegate
- (id<ASCollectionViewDelegateFlowLayout>)layoutDelegate
{
return (id<UICollectionViewDelegateFlowLayout>)self.collectionView.delegate;
return (id<ASCollectionViewDelegateFlowLayout>)_collectionView.asyncDelegate;
}
@end