1010#import " ASDelegateProxy.h"
1111#import " ASDisplayNode+Subclasses.h"
1212
13- @interface ASPagerNode () <ASCollectionDataSource, ASCollectionViewDelegateFlowLayout, ASDelegateProxyInterceptor> {
13+ @interface ASPagerNode () <ASCollectionDataSource, ASCollectionViewDelegateFlowLayout, ASDelegateProxyInterceptor>
14+ {
1415 UICollectionViewFlowLayout *_flowLayout;
1516 ASPagerNodeProxy *_proxy;
1617 id <ASPagerNodeDataSource> _pagerDataSource;
@@ -46,25 +47,6 @@ - (instancetype)initWithFlowLayout:(UICollectionViewFlowLayout *)flowLayout
4647 return self;
4748}
4849
49- - (void )setDataSource : (id <ASPagerNodeDataSource>)pagerDataSource
50- {
51- if (pagerDataSource != _pagerDataSource) {
52- _pagerDataSource = pagerDataSource;
53- _proxy = pagerDataSource ? [[ASPagerNodeProxy alloc ] initWithTarget: pagerDataSource interceptor: self ] : nil ;
54- super.dataSource = (id <ASCollectionDataSource>)_proxy;
55- }
56- }
57-
58- - (void )proxyTargetHasDeallocated : (ASDelegateProxy *)proxy
59- {
60- [self setDataSource: nil ];
61- }
62-
63- - (id <ASPagerNodeDataSource>)dataSource
64- {
65- return _pagerDataSource;
66- }
67-
6850- (void )didLoad
6951{
7052 [super didLoad ];
@@ -77,6 +59,11 @@ - (void)didLoad
7759 cv.showsHorizontalScrollIndicator = NO ;
7860 cv.scrollsToTop = NO ;
7961
62+ // Zeroing contentInset is important, as UIKit will set the top inset for the navigation bar even though
63+ // our view is only horizontally scrollable. This causes UICollectionViewFlowLayout to log a warning.
64+ // From here we cannot disable this directly (UIViewController's automaticallyAdjustsScrollViewInsets).
65+ cv.zeroContentInsets = YES ;
66+
8067 ASRangeTuningParameters preloadParams = { .leadingBufferScreenfuls = 2.0 , .trailingBufferScreenfuls = 2.0 };
8168 ASRangeTuningParameters renderParams = { .leadingBufferScreenfuls = 1.0 , .trailingBufferScreenfuls = 1.0 };
8269 [self setTuningParameters: preloadParams forRangeType: ASLayoutRangeTypePreload];
@@ -95,13 +82,14 @@ - (void)scrollToPageAtIndex:(NSInteger)index animated:(BOOL)animated
9582
9683- (ASCellNode *)collectionView : (ASCollectionView *)collectionView nodeForItemAtIndexPath : (NSIndexPath *)indexPath
9784{
98- ASDisplayNodeAssert (_pagerDataSource != nil , @" ASPagerNode must have a data source to load paging nodes" );
99- return [_pagerDataSource pagerNode: self nodeAtIndex: indexPath.item];
85+ ASDisplayNodeAssert (_pagerDataSource != nil , @" ASPagerNode must have a data source to load nodes to display" );
86+ ASCellNode *pageNode = [_pagerDataSource pagerNode: self nodeAtIndex: indexPath.item];
87+ return pageNode;
10088}
10189
10290- (NSInteger )collectionView : (UICollectionView *)collectionView numberOfItemsInSection : (NSInteger )section
10391{
104- ASDisplayNodeAssert (_pagerDataSource != nil , @" ASPagerNode must have a data source to load paging nodes" );
92+ ASDisplayNodeAssert (_pagerDataSource != nil , @" ASPagerNode must have a data source to load nodes to display " );
10593 return [_pagerDataSource numberOfPagesInPagerNode: self ];
10694}
10795
@@ -110,4 +98,25 @@ - (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSize
11098 return ASSizeRangeMake (CGSizeZero, self.view .bounds .size );
11199}
112100
101+ #pragma mark - Data Source Proxy
102+
103+ - (id <ASPagerNodeDataSource>)dataSource
104+ {
105+ return _pagerDataSource;
106+ }
107+
108+ - (void )setDataSource : (id <ASPagerNodeDataSource>)pagerDataSource
109+ {
110+ if (pagerDataSource != _pagerDataSource) {
111+ _pagerDataSource = pagerDataSource;
112+ _proxy = pagerDataSource ? [[ASPagerNodeProxy alloc ] initWithTarget: pagerDataSource interceptor: self ] : nil ;
113+ super.dataSource = (id <ASCollectionDataSource>)_proxy;
114+ }
115+ }
116+
117+ - (void )proxyTargetHasDeallocated : (ASDelegateProxy *)proxy
118+ {
119+ [self setDataSource: nil ];
120+ }
121+
113122@end
0 commit comments