大家好,我有一个UITableView,其中我有一个UITableViewCell,其中包含用于显示标题的UILabel和另一个用于显示描述的UILabel。 UITableViewCell的高度是根据标题标签和描述标签的文本计算的。
以下是UITableView方法返回单元格的高度,我根据名称和描述字段的文本计算单元格的高度。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
var height: CGFloat = 60
if empCornerSC.selectedSegmentIndex == 0{
let kra = kraList[indexPath.row]
let maxSize = CGSize(width: 200 , height: 1000)
let nameLabelSize = rectForText(text: kra.kraName!, font: 16, maxSize: maxSize)
let descriptionLabel = rectForText(text: kra.kraDescription!, font: 14, maxSize: maxSize)
height = nameLabelSize.height + descriptionLabel.height
height = height + 20
}
return height
}
根据文字和字体计算身高的方法,我从Youtube获得此方法让我们构建该应用程序
func rectForText(text: String, font: CGFloat, maxSize: CGSize) -> CGRect {
let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
return NSString(string: text).boundingRect(with: maxSize, options: options, attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: font)], context: nil)
}
我能够为我的UITableViewCell获得动态大小但是它不一致检查screenshot 正如您在图像中看到的,如果标签和描述文本很大,则单元格高度很大,而当lebel的内容较小时,则尺寸也较小。我希望单元格高度与内容大小相关。请帮我。提前谢谢。
答案 0 :(得分:0)
将let maxSize = CGSize(width: 200 , height: 1000)
更改为let maxSize = CGSize(width: labelWidth , height: 1000)
labelWidth应该是特定标签允许的最大宽度。您可以使用类似[[UIScreen mainScreen] bounds] .size.width - [XX](基于约束的40/50等)。在这种情况下,200似乎非常少,如附带的屏幕截图所示