【发布时间】:2020-03-10 14:52:32
【问题描述】:
我创建了一个 UICollectionViewCell xib,并希望单元格根据标签文本的长度自动调整,如下图所示。
图片显示了我在原型单元上制作的内容。但无论我怎么尝试,当我使用 xib 时,单元格的大小都保持不变。
【问题讨论】:
标签: ios swift uicollectionview uicollectionviewcell
我创建了一个 UICollectionViewCell xib,并希望单元格根据标签文本的长度自动调整,如下图所示。
图片显示了我在原型单元上制作的内容。但无论我怎么尝试,当我使用 xib 时,单元格的大小都保持不变。
【问题讨论】:
标签: ios swift uicollectionview uicollectionviewcell
实现这个委托 UICollectionViewDelegateFlowLayout
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let market = self.markets[indexPath.row]
let label = UILabel(frame: CGRect.zero)
label.text = market
label.sizeToFit()
return CGSize(width: label.frame.width, height: 25)
}
或
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let text = NSAttributedString(string: markets[indexPath.row])
return CGSize(width: text.size().width, height: 25)
}
【讨论】:
你也可以在 sizeForItemAt 中实现这个 只需插入“yourString”和“yourFont”:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let width = yourString.size(withAttributes: [NSAttributedString.Key.font: yourFont]).width
return CGSize(width: width, height: 20)
}
由于单元格的角半径,您可能需要在宽度上添加一些空间
【讨论】: