diff --git a/AsyncDisplayKit/ASCollectionView.mm b/AsyncDisplayKit/ASCollectionView.mm index 94ff1104d7..385ca7faf7 100644 --- a/AsyncDisplayKit/ASCollectionView.mm +++ b/AsyncDisplayKit/ASCollectionView.mm @@ -228,7 +228,9 @@ static BOOL _isInterceptedSelector(SEL sel) // Register the default layout inspector delegate for flow layouts, custom layouts // will need to roll their own ASCollectionViewLayoutInspecting implementation. - _layoutDelegate = [self flowLayoutInspector]; + if ([layout asdk_isFlowLayout]) { + _layoutDelegate = [self flowLayoutInspector]; + } _registeredSupplementaryKinds = [NSMutableArray array]; @@ -249,8 +251,6 @@ static BOOL _isInterceptedSelector(SEL sel) /** * 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 { diff --git a/AsyncDisplayKit/Details/ASCollectionViewFlowLayoutInspector.m b/AsyncDisplayKit/Details/ASCollectionViewFlowLayoutInspector.m index a34b6d66ca..efdb26bdaf 100644 --- a/AsyncDisplayKit/Details/ASCollectionViewFlowLayoutInspector.m +++ b/AsyncDisplayKit/Details/ASCollectionViewFlowLayoutInspector.m @@ -21,11 +21,12 @@ - (instancetype)initWithCollectionView:(ASCollectionView *)collectionView flowLayout:(UICollectionViewFlowLayout *)flowLayout { + self = [super init]; + if (flowLayout == nil) { return nil; } - - self = [super init]; + if (self != nil) { self.collectionView = collectionView; _layout = flowLayout; diff --git a/AsyncDisplayKitTests/ASCollectionViewTests.m b/AsyncDisplayKitTests/ASCollectionViewTests.m index 3b4d661514..1993d0734b 100644 --- a/AsyncDisplayKitTests/ASCollectionViewTests.m +++ b/AsyncDisplayKitTests/ASCollectionViewTests.m @@ -6,7 +6,8 @@ // #import -#import +#import "ASCollectionView.h" +#import "ASCollectionViewFlowLayoutInspector.h" @interface ASCollectionViewTestDelegate : NSObject @@ -79,7 +80,23 @@ @implementation ASCollectionViewTests -- (void)DISABLED_testCollectionViewController { +- (void)testThatItSetsALayoutInspectorForFlowLayouts +{ + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + XCTAssert(collectionView.layoutDelegate != nil, @"should automatically set a layout delegate for flow layouts"); + XCTAssert([collectionView.layoutDelegate isKindOfClass:[ASCollectionViewFlowLayoutInspector class]], @"should have a flow layout inspector by default"); +} + +- (void)testThatItDoesNotSetALayoutInspectorForCustomLayouts +{ + UICollectionViewLayout *layout = [[UICollectionViewLayout alloc] init]; + ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; + XCTAssert(collectionView.layoutDelegate == nil, @"should not set a layout delegate for custom layouts"); +} + +- (void)DISABLED_testCollectionViewController +{ ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];