我在动态大小的Storyboard中有以下布局:
但是,在运行应用程序时(取决于方向),单元格如下所示:
这是可以预料到的,因为之前的单元格具有静态高度和宽度。
但是,我希望单元格根据设备宽度动态调整大小(为此目的,高度可以保持静态)。 CollectionView本身可以正确调整大小,因为它固定在超视图上,因此如何使用自动布局约束覆盖单元格(相对于UICollectionView指定的静态单元格大小)。
答案 0 :(得分:5)
最简单的方法似乎是通过我的主视图控制器中的委托来覆盖单元格大小:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
float cellWidth = (self.view.frame.size.width / 2) - 35;
float cellHeight = cellWidth * 190.0f / 270.0f;
return CGSizeMake(cellWidth, cellHeight);
}
我更喜欢在故事板中拥有尽可能多的显示逻辑,但我认为这是Apple未来改进的空间。
答案 1 :(得分:1)
单元格大小不是由自动布局决定的,它们是由布局对象的itemSize属性设置的。如果您只有一个单元格类型,那么在IB中的集合视图中只需要一个单元格。加载集合视图后,可以根据集合视图的宽度在代码中设置该大小。我这样做了,
-(void)viewWillLayoutSubviews {
self.layout.itemSize = CGSizeMake(self.collectionView.bounds.size.width/2.5, 100);
}