2016-05-17 48 views
1

我经历了所有类似的StackOverflow问题,但没有找到解决方案。ContainerView中的嵌入式UICollectionView - 关于旋转问题

我:

  • 主视图控制器与容器视图(所有AutoLayouted没有任何问题)

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

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

  • 一切都还好,直到我旋转设备。虽然单元尺寸正确调整大小和绘制我得到的控制台错误:

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

同时我总是得到两(2)警告(可能是旋转前2个集视​​细胞):

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

我用尽了一切......任何想法?

Debug error

回答

0

我有同样的probleme在我的应用程序。 我通过在每个旋转重现流布局固定这一点。

示例代码:

/** 
* 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],但答案并不重要。

+0

是否有任何单线解决方案?我不想让这个工作:)的自定义黑客。 – sabiland

+0

没有抱歉...所有行不能用一行完成。更新布局以适合的最小值是flowLayout的一部分。 ContainerView仍然有点bug –

+0

好吧,我会尝试。无论如何,在我看来,应该有更优雅的解决方案,因为只有从肖像 - >风景旋转时才会出现问题。当应用程序以纵向模式启动时,没有任何问题。真奇怪。 – sabiland