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 内的滚动视图不会滚动?

ContainerView具有多个嵌入segues

具有多个嵌入 segues 的 ContainerView

嵌入在 containerView 中的 PageViewController 显示前一个视图的小边距

在 Cocoa App Swift [Mac OS] 中显示在 containerView 内的 NSViewController 不会与 Container 的边界对齐

ContainerView中嵌入的iOS7 SplitviewController不旋转