UICollectionView在容器视图中

问题描述:

desc:UICollectionView在容器视图中

我有一个视图控制器,它包含7个单元格的集合视图。当我显示这个控制器,所有工作正常,它完美地显示(控制器A)。 在另一个控制器(控制器B)我有一个容器视图,嵌入控制器A与集合视图。

问题:

运行的应用程序,并进入控制器B(嵌入控制器A)时,所有的控制器A的子观点看,除了集合视图的不错。在这种情况下,不是看到我的7个细胞,我只看到6个细胞,并且在点击其中一个细胞之后,最后一个细胞出现在细胞行中,现在它看起来很好(?!)。 它像收集视图正在重绘,我找不到原因或如何解决它。

任何帮助表示赞赏。

编辑

这是我的流程布局,这是我从viewDidLoad中称:

-(void) setFlowLayout { 
    BOOL isIphone = (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad); 
    float baseWidth = [[UIScreen mainScreen] bounds].size.width; 
    int width; 

    width = floor(baseWidth/7.0); 
    float space = baseWidth - (width * 7.0f); 
    space /= 7.0; 

    UICollectionViewFlowLayout * flow = [[UICollectionViewFlowLayout alloc] init]; 

    if(isIphone) { 
     flow.itemSize = CGSizeMake(width, kCellHeight); 
    } 
    else{ 
     flow.itemSize = CGSizeMake(width, kCellSizeIpad); 
    } 

    flow.minimumInteritemSpacing = space; 
    flow.headerReferenceSize = CGSizeMake(_collectionDays.frame.size.width, kSpacing); 
    flow.footerReferenceSize = CGSizeZero; 
    flow.scrollDirection = UICollectionViewScrollDirectionVertical; 

    [_collectionDays setCollectionViewLayout:flow]; 
} 

我也用这个来放置细胞在收集取景当中:

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ 
    CGFloat cellSpacing = ((UICollectionViewFlowLayout *) collectionViewLayout).minimumInteritemSpacing; 
    CGFloat cellWidth = ((UICollectionViewFlowLayout *) collectionViewLayout).itemSize.width; 
    NSInteger cellCount = [collectionView numberOfItemsInSection:section]; 
    CGFloat inset = (collectionView.bounds.size.width - (cellCount * (cellWidth + cellSpacing))) * 0.5; 
    inset = MAX(inset, 0.0); 

    return UIEdgeInsetsMake(0.0, inset, 0.0, inset); 
} 

this is the BAD part, not all 7 cells there

thats how it should look like

+0

分享你的源代码的相关部分 – ddb

+0

分享一些代码和图像。 – Sandy

所以目前还没有答案,但我发现我的方式来解决它。 我一直试图解决它,而且我认为它与容器大小调整同时被绘制。

我使用调用集合视图的layoutIfNeeded从其父视图控制器调用viewDidLayoutSubviews。

所以如果有人遇到它,它的一种修复方法。

很想听听更好的方法\解释。

-(void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 

    [_collectionDays layoutIfNeeded]; 
    [_collectionDays reloadData]; 
}