我经历了所有类似的StackOverflow问题,但没有找到解决方案。
我有:
带有容器视图的主ViewController(所有AutoLayouted都没有任何问题)
内部容器视图是CollectionViewController(水平布局)
现在,基于view.frame.height动态设置单元格大小(如图所示)
一切正常,直到旋转设备。虽然单元格大小已正确调整大小并绘制但我收到控制台错误:
“ 项目高度必须小于UICollectionView的高度减去部分插入顶部和底部值,减去内容插入的顶部和底部值。 ”< / p>
同时我总是得到两(2)个警告(可能在旋转前有2个集合视图单元格):
“ 快照尚未呈现的视图会导致空白快照。确保您的视图在屏幕更新后的快照或快照之前至少呈现过一次。 ”
我已经尝试了一切......有什么想法吗?
答案 0 :(得分:0)
I had the same probleme in my app. I fixed this by recreating the flow layout on each rotation.
Example code :
/**
* Update the layout based on screen size
*
* @param CGSize
* @return void
*/
- (void)updateLayoutBasedOnSize:(CGSize)size {
// Configure layout
CGSize offersSize;
// iPad Layout
if ([UIDevice isIPad]) {
if (size.width > size.height) {
// 4 cols
offersSize = CGSizeMake((size.width / 4) - 15.0f,
(((size.width / 4) / 3) * 2) - 20.0f);
} else {
// 2 cols
offersSize = CGSizeMake((size.width / 2) - 15.0f,
(((size.width / 2) / 3) * 2) - 20.0f);
}
// iPhone layout
} else {
if (size.width > size.height) {
// 2 cols
offersSize = CGSizeMake((size.width / 2) - 15.0f,
(((size.width / 2) / 3) * 2) - 20.0f);
} else {
// 1 col
offersSize = CGSizeMake(size.width - 20.0f,
((size.width / 3) * 2) - 20.0f);
}
}
offersSize.height += 30.0f;
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setItemSize:offersSize];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
[_collectionView setCollectionViewLayout:flowLayout];
}
And I call this method on each interface rotation with the collectionView size as parameter.
PS : I use some custom methods like [UIDevice isIPad]
but it doesn't matter in the answer.