容器视图中的UICollectionView

时间:2016-08-24 07:03:03

标签: ios objective-c uicollectionview uicontainerview redraw

递减:

我有一个视图控制器,它包含一个集合视图,里面有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

1 个答案:

答案 0 :(得分:1)

所以到目前为止还没有答案,但我找到了修复它的方法。 我一直试图解决它,我认为这与容器调整大小有关。

我使用viewDidLayoutSubviews中的父视图控制器调用集合视图的layoutIfNeeded来修复它。

所以,如果有人遇到它,它是解决它的一种方法。

很想听到更好的解释方式。

-(void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    [_collectionDays layoutIfNeeded];
    [_collectionDays reloadData];
}