【问题标题】:UICollectionView Cell Auto Size with AutoLayout iOS 8UICollectionView 单元格自动调整大小与 AutoLayout iOS 8
【发布时间】:2015-02-26 18:59:26
【问题描述】:

我正在尝试在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 设置在错误的位置,或者,如果我已经在情节提要中设置了指定的项目大小,那么它与估计的大小有某种冲突。

【问题讨论】:

    标签: ios objective-c uicollectionview autolayout autosize


    【解决方案1】:

    回答自己的问题,因为我发现了问题的原因:
    要使此功能起作用,UILabel 的宽度必须小于 UICollectionView 的宽度。即使在 Storyboard 中看起来没问题,如果正在使用 AutoLayout,则必须限制宽度,例如就我而言,我做了一个约束less or equal 320。没有它,标签会增长到非常大的宽度,但只有 1 行高。应用此约束后,换行开始起作用,并且标签的高度增加,而不仅仅是宽度。

    【讨论】:

    • 是的,它应该可以工作,但请注意,对于 iphone 6 和 6+,您的标签不会覆盖所有屏幕宽度...
    • 我做了一个插座,并在运行时将约束的值更改为手机的屏幕宽度。
    • 我有 150 宽度的单元格,但它没有为 iphone 6 和 6 plus 调整大小。你可以在这里找到它stackoverflow.com/questions/27981200/…
    • 对不起@RichardTopchiy 我已经删除了那个帖子。但是现在链接可以工作了。看看那个帖子。
    猜你喜欢
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2015-09-16
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    相关资源
    最近更新 更多