Ios ContainerView中的嵌入式UICollectionView-旋转问题
我检查了所有类似的StackOverflow问题,但没有找到解决方案 我有:Ios ContainerView中的嵌入式UICollectionView-旋转问题,ios,uicollectionview,Ios,Uicollectionview,我检查了所有类似的StackOverflow问题,但没有找到解决方案 我有: 带容器视图的主ViewController(所有自动布局都没有任何问题) 容器内部视图为CollectionViewController(水平布局) 现在,根据view.frame.height动态设置单元格大小(如图所示) 在我旋转设备之前,一切正常。虽然单元格大小已正确调整和绘制,但出现控制台错误: 项目高度必须小于UICollectionView的高度减去部分插入的顶部和底部值,再减去内容插入的顶部和底部值。
- 带容器视图的主ViewController(所有自动布局都没有任何问题)
- 容器内部视图为CollectionViewController(水平布局)
- 现在,根据view.frame.height动态设置单元格大小(如图所示)
- 在我旋转设备之前,一切正常。虽然单元格大小已正确调整和绘制,但出现控制台错误:
我的应用程序中也有同样的问题。 我通过在每次旋转时重新创建流布局修复了这个问题 示例代码:
/**
* 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];
}
我用collectionView大小作为参数,在每个接口旋转上调用这个方法
PS:我使用了一些自定义方法,如
[UIDevice isIPad]
,但这在答案中并不重要。我的应用程序中也遇到了同样的问题。
我通过在每次旋转时重新创建流布局修复了这个问题
示例代码:
/**
* 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];
}
我用collectionView大小作为参数,在每个接口旋转上调用这个方法
PS:我使用一些自定义方法,如
[UIDevice isIPad]
,但这在答案中并不重要。是否有任何一种线性解决方案?我不想做自定义的黑客来工作:)。不,对不起。。。一句话做不了所有的事。更新布局以适应的最低要求是具有flowLayout的零件。ContainerView还是有点问题好吧,我试试。无论如何,在我看来,应该有更优雅的解决方案,因为问题只发生在从纵向->横向旋转时。当应用程序以纵向模式启动时没有任何问题。真的很奇怪。有没有一种线性解决方案?我不想做自定义的黑客来工作:)。不,对不起。。。一句话做不了所有的事。更新布局以适应的最低要求是具有flowLayout的零件。ContainerView还是有点问题好吧,我试试。无论如何,在我看来,应该有更优雅的解决方案,因为问题只发生在从纵向->横向旋转时。当应用程序以纵向模式启动时没有任何问题。真奇怪。