【发布时间】:2023-04-02 06:57:01
【问题描述】:
我有一个 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返回之前
我想知道使用情节提要约束的正确方法是什么。我在 SO 上处理过类似问题的一些流行答案,但没有取得任何真正的成功。
【问题讨论】:
标签: ios swift uicollectionview autolayout uicollectionviewcell