Skip to content

Commit edf2b66

Browse files
Hannah TroisiAdlai Holler
authored andcommitted
[ASCollectionViewLayoutInspecting] make -scrollableDirections required (facebookarchive#2543)
* [ASCollectionViewLayoutInspecting] make -scrollableDirections a required method * doh! * fixed? * add assert per @appleguy's comment * use self.layoutInspector, add check at the start of didChangeBounds...
1 parent 55b5dff commit edf2b66

File tree

4 files changed

+21
-24
lines changed

4 files changed

+21
-24
lines changed

AsyncDisplayKit/ASCollectionView.mm

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@ @interface ASCollectionView () <ASRangeControllerDataSource, ASRangeControllerDe
212212
struct {
213213
unsigned int didChangeCollectionViewDataSource:1;
214214
unsigned int didChangeCollectionViewDelegate:1;
215-
unsigned int scrollableDirections:1;
216215
} _layoutInspectorFlags;
217216
}
218217

@@ -515,7 +514,6 @@ - (void)setLayoutInspector:(id<ASCollectionViewLayoutInspecting>)layoutInspector
515514

516515
_layoutInspectorFlags.didChangeCollectionViewDataSource = [_layoutInspector respondsToSelector:@selector(didChangeCollectionViewDataSource:)];
517516
_layoutInspectorFlags.didChangeCollectionViewDelegate = [_layoutInspector respondsToSelector:@selector(didChangeCollectionViewDelegate:)];
518-
_layoutInspectorFlags.scrollableDirections = [_layoutInspector respondsToSelector:@selector(scrollableDirections)];
519517
}
520518

521519
- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType
@@ -1117,23 +1115,8 @@ - (ASScrollDirection)_scrollDirectionForVelocity:(CGPoint)scrollVelocity
11171115

11181116
- (ASScrollDirection)scrollableDirections
11191117
{
1120-
//Cache results of layoutInspector to ensure flags are up to date if getter lazily loads a new one.
1121-
id<ASCollectionViewLayoutInspecting> layoutInspector = self.layoutInspector;
1122-
if (_layoutInspectorFlags.scrollableDirections) {
1123-
return [layoutInspector scrollableDirections];
1124-
} else {
1125-
ASScrollDirection scrollableDirection = ASScrollDirectionNone;
1126-
CGFloat totalContentWidth = self.contentSize.width + self.contentInset.left + self.contentInset.right;
1127-
CGFloat totalContentHeight = self.contentSize.height + self.contentInset.top + self.contentInset.bottom;
1128-
1129-
if (self.alwaysBounceHorizontal || totalContentWidth > self.bounds.size.width) { // Can scroll horizontally.
1130-
scrollableDirection |= ASScrollDirectionHorizontalDirections;
1131-
}
1132-
if (self.alwaysBounceVertical || totalContentHeight > self.bounds.size.height) { // Can scroll vertically.
1133-
scrollableDirection |= ASScrollDirectionVerticalDirections;
1134-
}
1135-
return scrollableDirection;
1136-
}
1118+
ASDisplayNodeAssertNotNil(self.layoutInspector, @"Layout inspector should be assigned.");
1119+
return [self.layoutInspector scrollableDirections];
11371120
}
11381121

11391122
- (ASScrollDirection)flowLayoutScrollableDirections:(UICollectionViewFlowLayout *)flowLayout {
@@ -1672,6 +1655,9 @@ - (void)didMoveToWindow
16721655
*/
16731656
- (void)layer:(CALayer *)layer didChangeBoundsWithOldValue:(CGRect)oldBounds newValue:(CGRect)newBounds
16741657
{
1658+
if (self.collectionViewLayout == nil) {
1659+
return;
1660+
}
16751661
CGSize lastUsedSize = _lastBoundsSizeUsedForMeasuringNodes;
16761662
if (CGSizeEqualToSize(lastUsedSize, newBounds.size)) {
16771663
return;

AsyncDisplayKit/Details/ASCollectionViewFlowLayoutInspector.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ NS_ASSUME_NONNULL_BEGIN
2727
*/
2828
- (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSizeForNodeAtIndexPath:(NSIndexPath *)indexPath;
2929

30+
/**
31+
* Return the directions in which your collection view can scroll
32+
*/
33+
- (ASScrollDirection)scrollableDirections;
34+
3035
@optional
3136

3237
/**
@@ -53,11 +58,6 @@ NS_ASSUME_NONNULL_BEGIN
5358
*/
5459
- (void)didChangeCollectionViewDataSource:(nullable id<ASCollectionDataSource>)dataSource;
5560

56-
/**
57-
* Return the directions in which your collection view can scroll
58-
*/
59-
- (ASScrollDirection)scrollableDirections;
60-
6161
#pragma mark Deprecated Methods
6262

6363
/**

AsyncDisplayKit/Details/ASCollectionViewFlowLayoutInspector.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ - (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSize
7979
return NodeConstrainedSizeForScrollDirection(collectionView);
8080
}
8181

82+
- (ASScrollDirection)scrollableDirections
83+
{
84+
ASDisplayNodeAssert(NO, @"layoutInspector object must implement -scrollableDirections %@", self);
85+
return ASScrollDirectionNone;
86+
}
87+
8288
- (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSizeForSupplementaryNodeOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
8389
{
8490
ASDisplayNodeAssert(NO, @"To support supplementary nodes in ASCollectionView, it must have a layoutInspector for layout inspection. (See ASCollectionViewFlowLayoutInspector for an example.)");

examples/CustomCollectionView/Sample/MosaicCollectionViewLayout.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,11 @@ - (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSize
214214
return ASSizeRangeMake(CGSizeZero, [layout _headerSizeForSection:indexPath.section]);
215215
}
216216

217+
- (ASScrollDirection)scrollableDirections
218+
{
219+
return ASScrollDirectionVerticalDirections;
220+
}
221+
217222
/**
218223
* Asks the inspector for the number of supplementary views for the given kind in the specified section.
219224
*/

0 commit comments

Comments
 (0)