我注意到如果我更改了UICollectionView的帧(例如,当切换调用状态栏时),集合视图不会为其新帧正确更新其单元格。在短片中可能最容易看到:
http://cl.ly/2t2Y2A3A2w1D/CollectionViewTest.mov
该简单测试的源文件位于:
http://cl.ly/0S0A360B3I3Q/CollectionViewTest.zip
我是否使用UICollectionViewController或UIViewController似乎并不重要。有没有人见过这个?我错过了什么吗?我发现的唯一解决方法是在视图控制器的viewWillLayoutSubviews或viewDidLayoutSubviews中的集合视图上调用reloadData,但是当集合视图的框架受到用户拖动的影响时,它远非理想,因为reloadData被多次调用并导致用户拖动时非常缓慢的UI更新。
答案 0 :(得分:9)
我遇到了类似的问题,UICollectionView
的{{1}}发生了变化,除非我致电frame
,否则它会卡在同一地点而不会移动reloadData
。
我通过将它添加到我的CollectionViewFlowLayout:
来修复它CollectionView
工作得很好。
答案 1 :(得分:2)
我有类似的问题。我只需要调整集合视图框架的大小,以便菜单可以显示在它下面,用户仍然可以向上滚动得足够远,菜单不会覆盖底部的单元格。
更改内容插件对我有用。
self.collectionView.contentInset = UIEdgeInsetsMake(0, 0, rect.size.height+8, 0);
我无法在不重新加载数据的情况下更改集合视图的框架,这会搞砸用户已选择的单元格。
答案 2 :(得分:0)
您可以在UIApplicationWillChangeStatusBarFrameNotification中使用UICollectionViewController注册表,并在选择器中使用reloadData。这样,只有在状态栏更改帧时才会重新加载数据。
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callCameIn:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];
}
-(void)callCameIn:(NSNotification *) aNote {
[self.collectionView reloadData];
}