自动布局iOS 8中的UICollectionView单元格自适应大小

7

我正在尝试在UICollectionViewController中设置iOS 8自动调整大小的单元格:
我使用StoryBoards创建了一个基本设计,并在其中设计了一个带有标签的UICollectionViewCell,该标签被限制在单元格的边界内。然后,我将该单元格的标签链接到单元格类,以便能够通过编程访问它。
如果不指定estimatedItemSize,一切都正常(当然除了自动调整大小)。

当我这样指定estimatedItemSize时:

- (void)viewDidLoad {
    [super viewDidLoad];
    UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)self.collectionViewLayout;
    layout.estimatedItemSize = CGSizeMake(100.0f, 30.0f);   
}

应用程序崩溃并显示以下错误信息:
the behavior of the UICollectionViewFlowLayout is not defined because:
the item width must be less than the width of the UICollectionView minus the section insets left and right values.
Please check the values return by the delegate.

我认为,我在错误的位置设置了 estimatedItemSize,或者,如果我已经在故事板中设置了指定项大小,那么它会与估计大小冲突。

1个回答

4
回答自己的问题,因为我找到了问题的原因:
要使这个功能工作,UILabel的宽度必须小于UICollectionView的宽度。即使在故事板中看起来没问题,如果使用了AutoLayout,则必须约束宽度,例如,在我的情况下,我做了一个小于等于320的约束。如果没有约束,标签就会变得非常宽,但只有一行高度。应用了这个约束后,文本换行开始工作,标签高度开始增加而不仅是宽度。

是的,它应该可以工作,但请注意对于 iPhone 6 和 6+,您的标签将无法覆盖整个屏幕宽度... - jerrygdm
我已经创建了一个插座(Outlet),并在运行时将约束值更改为手机屏幕的宽度。 - Richard Topchii
我有一个宽度为150的单元格,但在iPhone 6和6 Plus上无法自适应大小。你可以在这里找到它:https://dev59.com/nobca4cB1Zd3GeqPcvYN - Rugmangathan
抱歉@RichardTopchiy,我已经删除了那篇帖子,但现在链接可以使用了。请看一下那篇帖子。 - Rugmangathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接