您可能想要使用如下所示的功能。调整属性以适合您用于标签的字体和字体大小:
func handleEstimatedFrameForText(_ text: String) -> CGRect {
let size = CGSize(width: 200, height: 1000)
let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
return NSString(string: text).boundingRect(with: size, options: options, attributes: [NSAttributedStringKey.font: UIFont(name: "AvenirNext-Medium", size: 16) as Any], context: nil)
}
当您使用该方法设置标题的大小时,您想使用此函数获取UILabel
添加文本后的高度,然后添加填充类型、UIImageView
高度等。
在设置标题大小的方法中
var height: CGFloat = 0
let headerMessage = messages[indexPath.item]
if let labelText = headerMessage.text {
let headerImageViewHeight: CGFloat = 80 /* ADD IN YOUR UIIMAGEVIEW HEIGHT */
height = self.handleEstimatedFrameForText(labelText).height + headerImageViewHeight
return CGSize(width: view.frame.width, height: height)
} else {
return CGSize(width: view.frame.width, height: 200) /* DEFAULT SIZE */
}
您可能需要添加额外的几个像素,self.handleEstimatedFrameForText(labelText).height + headerImageViewHeight
因为某些字体需要额外的 12 像素左右才能在所有设备上工作。反复试验。