说明:
我有一个 View Controller ,它包含一个包含 7 个单元格的 Collection View 。当我显示这个 Controller 时,一切正常并且显示完美( Controller A)。 在另一个 Controller ( Controller B)上,我有一个容器 View ,它嵌入了 Controller A 和 Collection View 。
问题:
当运行应用程序并进入 Controller B(嵌入 Controller A)时, Controller A 的所有 subview 看起来都不错,除了 Collection View 。在这种情况下,我没有看到我的 7 个单元格,而是只看到 6 个单元格,在点击其中一个单元格后,最后一个单元格出现在单元格行中,现在看起来不错(?!)。 它就像正在重绘 Collection View ,我找不到原因或如何修复它。
感谢任何帮助。
编辑
这是我的流程布局,我从 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];
}
我还使用它来将单元格放置在 Collection View 的中间:
- (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);
}
最佳答案
到目前为止还没有答案,但我找到了修复它的方法。 我一直在尝试解决它,我认为它与容器在绘制时调整大小有关。
我在 viewDidLayoutSubviews 中使用从其父 View Controller 调用 Collection View 的 layoutIfNeeded 来修复它。
所以如果有人遇到它,这是修复它的一种方法。
希望听到更好的方式\解释。
-(void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[_collectionDays layoutIfNeeded];
[_collectionDays reloadData];
}
关于ios - 容器 View 中的 UICollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39116505/