如何调整自定义UITableViewCell的大小以适应内容?

时间:2016-09-02 19:58:05

标签: ios swift uitableview autolayout nslayoutconstraint

基本上,我有一个有10个标签的单元格,目前我已将其高度固定为300.但是,标签可能有也可能没有价值,如果标签没有特定值,那么我需要隐藏它们。检查每个标签的空状态然后调整高度同样是冗长和混乱的。有没有其他方法可以实现我想要的东西? enter image description here

1 个答案:

答案 0 :(得分:1)

这是一个想法的例子,我建议。我希望这可以帮助您找到适合自己的优化产品。

如果我认为,您的数据源是这样的:

// array of arrays of strings
var Array : [[String]] = [
     ["Label1", "Label2", "Label3", "Label4"],
     ["Label1", "Label2"],
     ["Label1", "Label2", "Label3", "Label4", "Label5", "Label6"],
]

可以实施这些方法:

func calculateExpectedHeight(withItemsCount: Int) -> CGFloat
{
    let titleHeight = 32.0 // this is e.g. your Layer Conf. label
    let itemHeight = 18.0 // this is for a label unit that is repeating

    return CGFloat(titleHeight) + CGFloat((Double(withItemsCount) * itemHeight)) + 12.0 //twelve is just for tuning
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let dataForThisRow = Array[indexPath.row]
    return calculateExpectedHeight(withItemsCount: dataForThisRow.count)
}