代码之家  ›  专栏  ›  技术社区  ›  Fred Faust

ui集合视图单元格动态高度,带两个动态标签和自动布局

  •  2
  • Fred Faust  · 技术社区  · 6 年前

    我有一个uiCollectionViewCell子类,它用原型单元和约束进行设置(每个视图都是垂直和水平连接的)。

    我有两个标签,大小不同,可以是一行或两行。为此,我在每个标签上设置了两个高度限制,一个大于或等于(16或20取决于标签),另一个小于或等于(32或40取决于标签)。

    标签上的行数设置为0。(尽管我尝试过各种设置)。

    因为我使用了自动布局和约束来设置视图,所以我在单元的awakefromnib()中指定了内容视图的宽度。

    override func awakeFromNib() {
            NSLayoutConstraint.activate([contentView.widthAnchor.constraint(equalToConstant: 341)])
            super.awakeFromNib()
            configureBorder()
    }
    

    在CollectionView的布局中,我为EstimateItemSize和itemsize指定了AutomaticDimension常量

    if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
        flowLayout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
        flowLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize
    }
    

    我有一个使用自动布局的想法 在集合视图上实现了委托。

    我遇到了非常不一致的布局,某些情况下,单元格将按我希望的方式显示,而在其他情况下,标签被截断,而在其他情况下,标签非常窄,显示的文本超过三行。

    我试过很多方法,包括打电话 .sizeToFit() 在每个标签的文本属性设置后,以及调用 .setNeedsDisplay() 在单元格返回之前 cellForItemAt

    我在想什么是 正确的 使用故事板约束来完成此操作的方法。我在这里讨论过一些类似问题的流行答案,尽管没有真正的成功。

    1 回复  |  直到 6 年前
        1
  •  4
  •   matt    6 年前
    flowLayout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
    flowLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize
    

    collectionView(_:layout:sizeForItemAt:)