ContainerView中嵌入的UICollectionView - 关于旋转问题

时间:2016-05-17 10:50:12

标签: ios uicollectionview

我经历了所有类似的StackOverflow问题,但没有找到解决方案。

我有:

  • 带有容器视图的主ViewController(所有AutoLayouted都没有任何问题)

  • 内部容器视图是CollectionViewController(水平布局)

  • 现在,基于view.frame.height动态设置单元格大小(如图所示)

  • 一切正常,直到旋转设备。虽然单元格大小已正确调整大小并绘制但我收到控制台错误:

项目高度必须小于UICollectionView的高度减去部分插入顶部和底部值,减去内容插入的顶部和底部值。 ”< / p>

同时我总是得到两(2)个警告(可能在旋转前有2个集合视图单元格):

快照尚未呈现的视图会导致空白快照。确保您的视图在屏幕更新后的快照或快照之前至少呈现过一次。

我已经尝试了一切......有什么想法吗?

Debug error

1 个答案:

答案 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.