递减:
我有一个视图控制器,它包含一个集合视图,里面有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);
}
答案 0 :(得分:1)
所以到目前为止还没有答案,但我找到了修复它的方法。 我一直试图解决它,我认为这与容器调整大小有关。
我使用viewDidLayoutSubviews中的父视图控制器调用集合视图的layoutIfNeeded来修复它。
所以,如果有人遇到它,它是解决它的一种方法。
很想听到更好的解释方式。
-(void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[_collectionDays layoutIfNeeded];
[_collectionDays reloadData];
}