使用UILabel文本在UITableView中设置UITableViewCell的动态高度

时间:2018-04-04 05:29:24

标签: uitableview uilabel swift4

大家好,我有一个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的内容较小时,则尺寸也较小。我希望单元格高度与内容大小相关。请帮我。提前谢谢。

1 个答案:

答案 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似乎非常少,如附带的屏幕截图所示