使用动态高度计算collectionViewCell的高度

时间:2016-06-01 11:55:51

标签: ios uicollectionview interface-builder

我有一个UICollectionViewCell,它有一些多行标签。单元格在笔尖内定义。我想将单元格布局在彼此之下(如UITableView),左右边距。

enter image description here

要计算单元格的高度,我在sizeForItemAtIndexPath中执行以下步骤:

  1. 实例化原型单元格
  2. 创建并添加具有所需宽度的临时宽度约束(collectionView宽度减去左右填充)
  3. 使用未来内容配置单元格
  4. 调用systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)以获取所需的高度
  5. 高度计算似乎总是略微偏离。在进一步检查之后(在systemLayoutSizeFittingSize之前调用layoutIfNeeded),似乎单元格已经具有宽度约束,其被设置为IB中布局的宽度。

    (
        "<NSAutoresizingMaskLayoutConstraint:0x7f91baf48be0 h=--& v=--& H:[UIView:0x7f91bacb7440(304)]>",
        "<NSLayoutConstraint:0x7f91bacb7f00 H:[UIView:0x7f91bacb7d90(359)]>",
        "<NSLayoutConstraint:0x7f91ba970730 H:[UIView:0x7f91bacb7d90]-(0)-|   (Names: '|':UIView:0x7f91bacb7440 )>",
        "<NSLayoutConstraint:0x7f91ba970780 H:|-(0)-[UIView:0x7f91bacb7d90]   (Names: '|':UIView:0x7f91bacb7440 )>"
    )
    

    在设计时,电池的宽度为304pt。在这种情况下,所需的电池宽度为359pt。

    enter image description here

    任何人都知道是否有可能以某种方式禁用IB隐式创建宽度约束?或者是否有更好的方法来实现灵活的高度,固定左和右;右边距布局?

    本文建议将集合视图的大小保持为默认值(10x10),但这只适用于非常简单的UI,并且使用界面构建器来查看设计有点没有实际意义:

    http://corsarus.com/2015/collection-view-with-self-sizing-cells/

1 个答案:

答案 0 :(得分:1)

您需要为单元格中的每个标签设置Content Hugging priority和Content Compression Resistance优先级(垂直),或为某些标签声明一些高度限制