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);
}
答
所以目前还没有答案,但我发现我的方式来解决它。 我一直试图解决它,而且我认为它与容器大小调整同时被绘制。
我使用调用集合视图的layoutIfNeeded从其父视图控制器调用viewDidLayoutSubviews。
所以如果有人遇到它,它的一种修复方法。
很想听听更好的方法\解释。
-(void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[_collectionDays layoutIfNeeded];
[_collectionDays reloadData];
}
分享你的源代码的相关部分 – ddb
分享一些代码和图像。 – Sandy