设置为固定的行数时,UITableViewCell中的UILabel会占用额外的空间

时间:2019-03-25 19:24:19

标签: swift uitableview uilabel

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

该显示标签的约束在下面。所有其他元素都是从容器顶部到底部之间的5个点。如果文本为2行或更少,则没有多余的空间。有没有人经历过或找到了解决方法?

enter image description here enter image description here enter image description here

6 个答案:

答案 0 :(得分:1)

如果您不希望标签增长得超出预期。

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

如果使用笔尖/故事板。只需将content hugging priority更改为1000

答案 1 :(得分:1)

假设其他三个标签具有numberOfLines 1。

这是可行的解决方案

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
}

日期标签

约束和内容拥抱优先级

Date Label

第二个标签

约束和内容拥抱优先级

2nd Label

标签东西

约束和内容拥抱优先级

Label Thing

标签最后一个(上午12:00)

约束和内容拥抱优先级

Time label

  

结果:

Result in iPhone X

有关详细信息,请参阅此链接 Demo Project

希望它会对您有所帮助。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

由于存在约束,您需要告诉UILabel您将处理UILabel上的多行内容。另外,当发生这种情况时,您可能需要重新调整表格视图单元格/行的大小,以便它们可以适应。

确保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

答案 4 :(得分:0)

对于我来说,我使用此功能,如果屏幕较小,它将自动缩小到您设置的最小尺寸。 希望这可以帮助。

Minimum Font Size

答案 5 :(得分:0)

Why don't you just provide static height to UILabel if you don't want it to be any longer than 2 lines, give it an approx height of 40-50