繁体   English   中英

帧更改后,UICollectionView会错误地显示单元格

[英]UICollectionView displays cells incorrectly after frame change

我注意到,如果我更改UICollectionView的帧(例如,当切换调用状态栏时),集合视图不会为其新帧正确更新其单元格。 在短视频中看起来最简单:

http://cl.ly/2t2Y2A3A2w1D/CollectionViewTest.mov

这个简单测试的源文件在这里:

http://cl.ly/0S0A360B3I3Q/CollectionViewTest.zip

我是否使用UICollectionViewController或UIViewController似乎并不重要。 有没有人见过这个? 我错过了什么吗? 我发现的唯一解决方法是在视图控制器的viewWillLayoutSubviews或viewDidLayoutSubviews中的集合视图上调用reloadData,但是当集合视图的框架受到用户拖动的影响时,它远非理想,因为reloadData被多次调用并导致用户拖动时非常缓慢的UI更新。

我有一个类似的问题,我的UICollectionViewframe发生了变化,除非我调用reloadData ,否则它会卡在同一个地方,而不会移动CollectionView

我通过将它添加到我的CollectionViewFlowLayout来修复它:

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
    return YES;
}

工作得很好。

我遇到了类似的问题。 我只需要调整集合视图框架的大小,以便菜单可以显示在它下面,用户仍然可以向上滚动得足够远,菜单不会覆盖底部的单元格。

更改内容插件对我有用。

self.collectionView.contentInset = UIEdgeInsetsMake(0, 0, rect.size.height+8, 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];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM