ContainerView 内的嵌入式 UICollectionView - 关于旋转问题
Posted
技术标签:
【中文标题】ContainerView 内的嵌入式 UICollectionView - 关于旋转问题【英文标题】:Embedded UICollectionView inside ContainerView - on rotate problems 【发布时间】:2016-05-17 10:50:11 【问题描述】:我检查了所有类似的 *** 问题,但没有找到解决方案。
我有:
带有容器视图的主视图控制器(所有自动布局都没有任何问题)
Container View 内部是 CollectionViewController(水平布局)
现在,单元格大小是根据 view.frame.height 动态设置的(如图所示)
在我旋转设备之前一切正常。虽然单元格大小已正确调整大小和绘制我得到控制台错误:
"item 高度必须小于 UICollectionView 的高度减去 section insets 顶部和底部值,减去 content insets 顶部和底部值。"
同时我总是收到两 (2) 个警告(可能是旋转前的 2 个集合视图单元格):
“对尚未渲染的视图进行快照会导致快照为空。确保您的视图在快照之前或屏幕更新后的快照之前至少渲染过一次。”
我什么都试过了……有什么想法吗?
【问题讨论】:
【参考方案1】:我在我的应用程序中遇到了同样的问题。 我通过在每次旋转时重新创建流布局来解决此问题。
示例代码:
/**
* 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 还是有点问题 好的,我试试。无论如何,在我看来应该有更优雅的解决方案,因为只有在从纵向 -> 横向旋转时才会出现问题。 App以纵向模式启动时没有任何问题。真的很奇怪。以上是关于ContainerView 内的嵌入式 UICollectionView - 关于旋转问题的主要内容,如果未能解决你的问题,请参考以下文章
嵌入在 containerView 中的 PageViewController 显示前一个视图的小边距
在 Cocoa App Swift [Mac OS] 中显示在 containerView 内的 NSViewController 不会与 Container 的边界对齐