The*_*Eye 3 rotation ios autolayout uicollectionview viewwilltransitiontosize
我开始使用AutoLayout进行大型项目,并对此感到非常惊讶.但是,现在我必须调整项目以适应旋转和大小类,并且我很难让视图正常运行.
该基地的问题是,我有UICollectionViews与一遍包含UICollectionViews细胞.旋转设备时,基本集合视图会正确调整其单元格,但嵌套集合视图的所有单元格都不会自动调整为新大小.
调查后归结为:
viewWillTransitionToSize被调用时,基集合视图尚未旋转(如预期)coordinator animateAlongsideTransition ... completion:{}块中viewWillTransitionToSize也没有新的宽度.上面的意思是没有地方我可以告诉嵌套集合视图的单元格改变它们的大小,因为我还不知道新的宽度; 并且自动布局系统不会自动调整它们.
有没有其他人有同样的问题或知道解决方案?
在这里回答我自己的问题 - 我终于找到了解决方案.对于其他遇到麻烦的人来说,这就是我所做的:
主要部分在于放置invalidateLayout和reloadData拨打正确的地方:
invalidateLayout在willTransitionToSize函数中放置基本collectionView的布局.reloadData的完成块中放置一个基本collectionView .coordinator animateAlongsideTransition:willTransitionToSizeprepareLayout集合视图布局的功能,请确保预先计算的单元格大小使用正确的宽度,我在这里使用了错误的宽度,这会导致一些其他问题.小智 5
感谢眼睛。我想将此添加为对他们的回复的评论,但显然我还没有足够的业力,所以请将此视为附录。
我遇到了同样的问题,但是我的 uicollectionview 中的单元格在选择时具有“展开状态”。如果用户旋转设备并且我们调用[self.collectionview reloadData],则任何展开的单元格都将丢失其状态。您可以选择调用performBatchUpdates并强制集合视图进行布局,而不会丢失任何单元格的状态
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{
[self.collectionView.collectionViewLayout invalidateLayout];
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
//[self.collectionView reloadData];//this works but reloading the view collapses any expanded cells.
[self.collectionView performBatchUpdates:nil completion:nil];
}];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4005 次 |
| 最近记录: |