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

问题描述 投票:0回答:3

我有一个静态的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

swift uitableview
3个回答
0
投票

由于sizeToFit()不适用于您,因此我们将尝试更多涉及的事情。

第3节中的单元格以正确的方式显示数据。这是因为UILabel不会自动调整其高度以容纳其中的文本。这是您需要做的:

1。为UILabel创建一个高度约束在界面构建器中,为第3节的单元格中UILabel的高度添加约束。通过@IBOutlet将此高度约束连接到视图控制器的类:

class YourViewController: UIViewController {

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

    ...

}

2。 [添加用于计算高度的字符串扩展名]我不确定您在何处/何时设置有问题的UILabel的文本,但是我知道您正在某处进行此操作,因为您将其描述为“动态的”。每当您确实设置有问题的UILabel的文本时,现在还需要更改为适应此文本而设置的高度约束的常数。因此,我们需要能够根据UILabel的宽度和字体来计算其高度。我们可以在extension上添加一个String以执行此操作:

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)

第3节中的单元格

以正确的方式显示数据。除非另行说明,否则UILabel不会自动调整以适应其中的文本。

我需要您选择的是UILabel,然后在属性检查器中将Number of Lines设置为0enter image description here

您还说过,此UILabel是动态的,这意味着您将其文本设置为代码中的某个位置。设置此UILabel的文本后,您将立即要调用myLabel.sizeToFit()。这应该调整标签的高度以容纳其中的文本。

如果这不起作用,我还有另一种更复杂的解决方案应该对您有用。

请看下面;

  • 选择您的cellLabel并将Lines值设置为0:

还有苹果说Self-Sizing

摘要:在单元格的内容视图中布置表格视图单元格的内容。要定义单元格的高度,您需要不间断的约束和视图链(具有定义的高度),以填充内容视图的顶部边缘与其底部边缘之间的区域。如果您的视图具有固有的内容高度,则系统将使用这些值。如果不是,则必须将适当的高度限制添加到视图或内容视图本身。将AuthorLabel的底部约束从等于或大于或等于更改为>]


0
投票

第3节中的单元格


0
投票

请看下面;

© www.soinside.com 2019 - 2024. All rights reserved.