如何让 Storyboard 支持 UICollectionView 中动态大小的单元格?

Posted

技术标签:

【中文标题】如何让 Storyboard 支持 UICollectionView 中动态大小的单元格?【英文标题】:How to get Storyboard to support dynamically sized cells in UICollectionView? 【发布时间】:2014-11-24 16:53:40 【问题描述】:

我的动态大小的故事板中有以下布局:

但是,在运行应用程序时(取决于方向),单元格如下所示:

这是意料之中的,因为之前的单元格具有静态高度和宽度。

但是,我希望单元格根据设备宽度动态调整大小(为此,高度可以保持静态)。 CollectionView 本身会正确调整大小,因为它固定在其父视图上,因此如何使用自动布局约束覆盖单元格(与 UICollectionView 规定的静态单元格大小相比)。

【问题讨论】:

【参考方案1】:

最简单的方法似乎是通过我的主视图控制器中的委托覆盖单元格大小:

- (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 未来改进的空间。

【讨论】:

【参考方案2】:

单元格大小不是由自动布局决定的,它们是由布局对象的 itemSize 属性设置的。如果您只有一种单元格类型,那么您在 IB 的集合视图中只需要一个单元格。加载集合视图时,您可以根据集合视图的宽度在代码中设置该大小。我就是这样弄的,

-(void)viewWillLayoutSubviews 
    self.layout.itemSize = CGSizeMake(self.collectionView.bounds.size.width/2.5, 100);

【讨论】:

以上是关于如何让 Storyboard 支持 UICollectionView 中动态大小的单元格?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 UIView 在 Xcode 的 Storyboard 编辑器中可见?

如何在自动布局中设计 3x3 按钮支持所有使用 Storyboard 的 iPhone 设备

[iOS Swift4]如何支持 ViewControllers(模态和推送)

UICollectionView insertSections 错误 - NSInvalidArgumentException 原因 setObjectForKey 对象不能为 nil UIColle

在 Xcode 中,如何重命名 Storyboard 中的约束?

如何使用非基础本地化在 Xcode 中预览 Storyboard