Ios ContainerView中的嵌入式UICollectionView-旋转问题

Ios ContainerView中的嵌入式UICollectionView-旋转问题,ios,uicollectionview,Ios,Uicollectionview,我检查了所有类似的StackOverflow问题,但没有找到解决方案 我有: 带容器视图的主ViewController(所有自动布局都没有任何问题) 容器内部视图为CollectionViewController(水平布局) 现在,根据view.frame.height动态设置单元格大小(如图所示) 在我旋转设备之前,一切正常。虽然单元格大小已正确调整和绘制,但出现控制台错误: 项目高度必须小于UICollectionView的高度减去部分插入的顶部和底部值,再减去内容插入的顶部和底部值。

我检查了所有类似的StackOverflow问题,但没有找到解决方案

我有:

  • 带容器视图的主ViewController(所有自动布局都没有任何问题)

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

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

  • 在我旋转设备之前,一切正常。虽然单元格大小已正确调整和绘制,但出现控制台错误:

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

同时,我总是收到两(2)条警告(可能是旋转前的2个集合视图单元格):

对未渲染的视图进行快照会导致快照为空。请确保在快照之前或屏幕更新之后,视图至少已渲染一次。

我什么都试过了…有什么想法吗


我的应用程序中也有同样的问题。 我通过在每次旋转时重新创建流布局修复了这个问题

示例代码:

/**
 * 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还是有点问题好吧,我试试。无论如何,在我看来,应该有更优雅的解决方案,因为问题只发生在从纵向->横向旋转时。当应用程序以纵向模式启动时没有任何问题。真奇怪。