UITableViewCell 中的 UILabel 设置为固定行数时占用额外 space

UILabel in UITableViewCell takes up extra space when set to fixed number of lines

我在 table 视图单元格中有一个标签。我已将标签设置为多行,2。但是,如果文本较大,它会占用 space,就好像它没有行限制并显示全文一样。尽管它只显示两行。

该显示标签的限制如下。所有其他元素都是从容器顶部到底部从上到下 5 个点。如果文本为2行或更少,则没有多余的space。有没有人经历过这个问题或找到了解决办法?

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableView.automaticDimension
    }

由于您有约束,因此您需要告诉 UILabel 您将在 UILabel 上处理多于 1 行。此外,当发生这种情况时,您可能需要调整 tableview cell/row 的大小,以便它们能够适应。

确保 tableview 会适应。

override func viewWillAppear(_ animated: Bool) {
    tableView.rowHeight = UITableView.automaticDimension
    tableView.estimatedRowHeight = 65.0
} 

解决 UILabel 问题

let subTitleLabel: UILabel = {
    let label = UILabel()
    label.text = "My String"
    label.font = UIFont.systemFont(ofSize: 22).bold()
    label.textColor = UIColor(red: 0.773, green: 0.776, blue: 0.773, alpha: 1.0)
    label.numberOfLines = 0 // <---- change number of lines
    label.fitTextToBounds()
    label.translatesAutoresizingMaskIntoConstraints = false // <--- only if using constrains
    label.textAlignment = .left
    return label

就我而言,我使用此功能,如果屏幕较小,它会自动将其缩小到您设置的最小尺寸。 希望这可以帮助。

Minimum Font Size

如果你不希望你的标签增长得比预期的高。

label.setContentCompressionResistancePriority(.required, for: .vertical)

如果您正在使用 nib/storyboard。只需将 content hugging priority 更改为 1000

假设其他三个标签有numberOfLines1.

所以这是可行的解决方案

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib..

    self.tableView.delegate = self
    self.tableView.dataSource = self
    self.tableView.estimatedRowHeight = 112
    self.tableView.rowHeight = UITableView.automaticDimension
}

日期标签

约束和内容拥抱优先级

第二个标签

约束和内容拥抱优先级

标记事物

约束和内容拥抱优先级

标记最后一个 (12:00 AM)

约束和内容拥抱优先级

Result:

详细信息请参考此link Demo Project

希望对您有所帮助。