UICollectionView contentOffset随自定义布局而变化
我有一个UICollectionView与自定义UICollectionViewLayout(实际上,我使用这个不错的布局 )。
我在viewDidLoad中设置了contentOffset = CGPointZero
。 然而,在viewDidLoad之后,偏移量是-20,内容被按下来,如下所示:
(它应该与线路齐平)。 我在界面构build器中加载集合视图布局。 看来我的问题与这个问题非常相似,但是那里的解决scheme并不适合我。
我尝试修改我的布局实现中的collectionViewContentSize
,以确保它始终大于collectionView的大小。 虽然这意味着我可以滚动我的内容(它比collectionView的高度短)并隐藏额外的空间,我也可以向上滚动查看它。
没有什么似乎工作!
我发现这种情况发生的原因。 检查从这个问题接受的答案: 状态栏和导航栏出现在我的视图的边界在iOS 7中
的确,我们可以在viewDidLoad
设置edgesForExtendedLayout
或者在IB(如果使用Storyboard)中automaticallyAdjustsScrollViewInsets
edgesForExtendedLayout
UIViewController的UIViewController属性,它将解决我们的问题。
只是不要忘记检查这个属性是可用的,因为在iOS6或之前它将导致崩溃:
if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) { self.automaticallyAdjustsScrollViewInsets = NO; }
问候!
我能拿出的唯一解决scheme几乎不可接受的行为:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (self.collectionView.contentOffset.y < 0) { self.collectionView.contentOffset = CGPointMake(self.collectionView.contentOffset.x, 0.0); } }
以及在collectionViewContentSize
中将内容的高度设置为fmax(self.collectionView.frame.size.height + 20, [self stackedSectionHeight])
这将删除部分标题上方的空间,但会从顶部删除“反弹”。 一个相当不理想的解决scheme,但相当可以接受。
我会接受更好的答案,如果任何人有一个,或者如果我find一个我会更新这个答案。