swift - 静态 UITableViewCell 的自动高度调整不起作用

标签 swift uitableview

我有一个静态UITableView,我想动态设置三个单元格的行高。因此,在 viewDidLoad() 中,我实现了以下代码:

tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableView.automaticDimension

我还实现了 heightForRowAt 方法: (第一部分的前两个单元格应具有固定高度)

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    if indexPath.section == 0 && indexPath.row == 0 {
        return CGFloat(85)
    } else if indexPath.section == 0 && indexPath.row == 1 {
        return CGFloat(145)
    }

    return UITableView.automaticDimension 
}

这是我目前得到的结果:

enter image description here

我也将标签的行数更改为 0,单元格内标签的约束为 0、12、0、12(上、右、下、左)。

有人知道为什么第 3 部分中的单元格不能以正确的方式显示数据吗?

编辑: (上述建议实现后的效果如何)

enter image description here

最佳答案

因为 sizeToFit() 不适合您,我们将尝试一些更复杂的方法。

第 3 部分中的单元格以正确的方式显示数据。这是因为 UILabel 不会自动调整其高度以容纳内部文本。您需要执行以下操作:

<强>1。为 UILabel 创建高度约束 在界面生成器中,为第 3 部分的单元格中的 UILabel 添加高度约束。通过 @IBOutlet 将此高度约束连接到 View Controller 的类:

class YourViewController: UIViewController {

    @IBOutlet var cellLabel: UILabel!
    @IBOutlet var cellLabelHeight: NSLayoutConstraint!

    ...

}

<强>2。添加计算高度的字符串扩展 我不确定您在何处/何时设置相关 UILabel 的文本,但我知道您正在某处执行此操作,正如您所描述的那样“动态的”。每当您设置相关 UILabel 的文本时,您现在还需要更改我们为适应该文本而创建的高度约束常量。因此,我们需要能够根据 UILabel 的宽度和字体计算它的高度。我们可以向 String 添加一个 extension 来执行此操作:

extension String {
    func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat {
        let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
        let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [.font: font], context: nil)

        return ceil(boundingBox.height)
    }
}

<强>3。根据 UILabel 的文本设置高度约束常量最后一步是设置我们使用刚刚创建的扩展创建的 UILabel 高度约束的高度:

cellLabel.text = "DummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyData"
//This will be called immediately after you set the text for the UILabel in question
cellLabelHeight.constant = cellLabel.text.height(withConstrainedWidth: cellLabel.frame.width, font: cellLabel.font)

关于swift - 静态 UITableViewCell 的自动高度调整不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58418534/

相关文章:

ios - 在框架中使用sqlite

swift - 使用 uipickerView 时将 OF 对象保存到数组中

ios - 禁用除最后一个单元格之外的所有 UITableView 单元格 - Swift

iphone - 来自 pList 的 UITableView 分段,可以深入到 subview

ios - 在 Swift 中的 UITableView 上插入一个 float 操作按钮

ios - UITableView 单元格被发送 setSelected :NO during layoutView

ios - 修复具有大量状态的巨型 View Controller

ios - 在 iOS 上无需身份验证即可跟踪付费内容

ios - 在 Swift Playground 中演奏音符

ios - 如何在 iPhone 中将 ImageView 的位置设置为 UITableViewCell 的中心