swift collectionView里的cell怎么根据文字内容自动撑开高度
时间: 2024-02-18 18:59:11 浏览: 69
在 Swift 中,要根据文字内容自动撑开 UICollectionViewCell 的高度,可以使用 UICollectionViewDelegateFlowLayout 协议中的方法 `sizeForItemAt` 来实现。
具体实现步骤如下:
1. 计算出文字内容所需的高度,可以使用 NSString 的方法 `boundingRect`,代码如下:
```
let text = "这是要显示的文字内容"
let width = collectionView.bounds.width - 20 // 减去 cell 左右间距
let font = UIFont.systemFont(ofSize: 16) // 设置字体大小
let size = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude)
let attributes = [NSAttributedString.Key.font: font]
let textRect = NSString(string: text)
.boundingRect(with: size,
options: .usesLineFragmentOrigin,
attributes: attributes,
context: nil)
```
2. 根据计算出的文字内容高度,返回对应的 cell 高度,需要加上 cell 上下间距和文字内容与 cell 上下边距的总和,代码如下:
```
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let text = "这是要显示的文字内容"
let width = collectionView.bounds.width - 20 // 减去 cell 左右间距
let font = UIFont.systemFont(ofSize: 16) // 设置字体大小
let size = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude)
let attributes = [NSAttributedString.Key.font: font]
let textRect = NSString(string: text)
.boundingRect(with: size,
options: .usesLineFragmentOrigin,
attributes: attributes,
context: nil)
let cellHeight = textRect.height + 20 + 10 // 20 为 cell 上下间距,10 为文字内容与 cell 上下边距的总和
return CGSize(width: width, height: cellHeight)
}
```
这样就可以自动撑开 UICollectionViewCell 的高度了。
阅读全文