我正在尝试创建一个集合视图,可以显示一个垂直的单元格列表(如此1列),其中每个单元格的高度大小适合某些变量文本。这意味着我的单元格的宽度固定在我的集合视图的边界(我想?)。每个单元格都包含文本的UILabel。
我知道使用表视图很容易做到这一点,但最终我希望我的列表能够通过点击按钮在网格样式和列表样式之间跳转。我认为单个集合视图可以处理这两种情况。
使用UIFlowLayout很容易让单元格成为标签,但我无法修复宽度。我试过在collectionView(sizeForItemAt)
中徘徊,我可以得到正确的宽度,但在这里我不知道如何获得动态高度。
如果我无法解决这个问题,那么我将只使用表格视图和集合视图。
更新:
自发布以来,我取得了一些进步。通过将流量布局设置为估计的大小,我能够获得我想要的动态高度。在我的collectionView(cellforItemAt indexPath)
中,通过执行以下操作,我可以获得最大宽度到我的collectionView的边界:cell.textPreview.preferredMaxLayoutWidth = collectionView.bounds.width - 10
。 slides所以现在我需要弄清楚如何修复标签的宽度。
答案 0 :(得分:0)
有点黑客,但我解决了自己的问题。这是我做的:
我在Xib中创建了一个特殊的UICollectionViewCell,其唯一目的是调整文本大小。该单元格仅包含标签。我在我的大小调整单元格上设置了约束,使宽度固定在我的集合视图的边界上。
func getDimensions(for text: String) -> CGSize {
if let cell = SizingTextCollectionViewCell.fromNib() {
cell.configure(with: text)
cell.textLabel.preferredMaxLayoutWidth = collectionView!.bounds.width
cell.labelWidthLayoutConstraint.constant = collectionView!.bounds.width
return cell.contentView.systemLayoutSizeFitting(UILayoutFittingCompressedSize)
}
return CGSize.zero
}
然后在collectionView(sizeForItem)
(UICollectionViewDelegateFlowLayout
中)我返回给定一些文本的每个单元格的大小。现在它有效! This guide was really helpful.