我正在尝试使用单个列(一种tableview样式)创建一个带有动态高度单元格的collectionView。每个单元格将包含一个顶视图,其高度为50个点,并且对单元格具有前导,尾随和顶部约束。唯一的另一件事是下面的一些文字,根据其内容,它将具有动态高度。问题是我试图使用boundingRect方法来计算标签的大小,但如果文本太长,它将被切断(剪裁)并且单元格不应该高。这是我的代码:
extension CustomCollectionViewController: UICollectionViewDelegateFlowLayout{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let collectionViewWidth = collectionView.bounds.width
let topViewHeight: CGFloat = 50
let topAndBottomMargin: CGFloat = 8
let width = collectionViewWidth - 4 * 2
let text = answer[indexPath.item]
let s = NSString(string: "hello")
let font = UIFont.systemFont(ofSize: 15)
let height = calculateTextHeight(for: text, font: font, width: width - 100)
return CGSize(width: width, height: height + topViewHeight + topAndBottomMargin + 16)
}
func calculateTextHeight(for text: String, font:UIFont, width: CGFloat) -> CGFloat{
let attributes = [NSFontAttributeName: font]
let estimateHeight = NSString(string: text).boundingRect(with: CGSize(width: width, height: .greatestFiniteMagnitude), options: [.usesLineFragmentOrigin, .usesFontLeading], attributes: attributes, context: nil)
let string = NSString(string: text)
//let estimateHeight = string.size(attributes: [NSFontAttributeName: font])
print(estimateHeight.height)
return CGFloat(ceil(estimateHeight.height))
}
第二件事是我仍然不明白CGSize中的宽度如何影响整体高度?
我尝试使用NSString.size,但根本不起作用。它严重低估了字符串的高度