根据tableview单元格中的内容更改uilabel高度

时间:2018-01-15 13:48:11

标签: ios swift uitableview uilabel

我想根据里面的文字扩展标签的高度。我使用tableviewcontroller与静态单元格。

enter image description here

我在tableview单元格中有一个UILabel,我设置了标签的顶部,底部,右侧和左侧约束。

我尝试了这些解决方案:

self.eDesc.numberOfLines = 0
self.eDesc.lineBreakMode = NSLineBreakMode.byWordWrapping
self.eDesc.sizeToFit()
self.tableView.estimatedRowHeight = 140
self.tableView.rowHeight = UITableViewAutomaticDimension

但他们都没有奏效。

有没有其他方法(可能通过标签框架改变大小)?

1 个答案:

答案 0 :(得分:6)

设置行高的自动尺寸&估计行高,确保执行以下步骤,自动尺寸对单元格/行高度布局有效。我刚刚测试了以下步骤和代码并且工作正常。

  • 分配并实施tableview dataSource和delegate
  • UITableViewAutomaticDimension分配给rowHeight& estimatedRowHeight
  • 实施委托/数据源方法(即heightForRowAt并向其返回值UITableViewAutomaticDimension

-

@IBOutlet weak var table: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Don't forget to set dataSource and delegate for table
    table.dataSource = self
    table.delegate = self

    // Set automatic dimensions for row height
    // Swift 4.2 onwards
    table.rowHeight = UITableView.automaticDimension
    table.estimatedRowHeight = UITableView.automaticDimension


    // Swift 4.1 and below
    table.rowHeight = UITableViewAutomaticDimension
    table.estimatedRowHeight = UITableViewAutomaticDimension

}



// UITableViewAutomaticDimension calculates height of label contents/text
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    // Swift 4.2 onwards
    return UITableView.automaticDimension

    // Swift 4.1 and below
    return UITableViewAutomaticDimension
}

用于UITableviewCell中的标签实例

  • 设置行数= 0(& line break mode = truncate tail)
  • 相对于其superview / cell容器设置所有约束(顶部,底部,右侧)。
  • 可选:如果您希望标签覆盖最小垂直区域,即使没有数据,也可以设置标签的最小高度。

enter image description here

编辑 :对于单元格中的任何UIElement,您必须缺少顶部或底部或高度布局约束。确保单元格中的所有UIElements具有有效的顶部和底部(以及高度,必要时)约束附加的垂直(相邻)UIElement。

注意:如果您有多个动态长度的标签(UIElements),应根据其内容大小进行调整:调整内容拥抱和压缩阻力优先级`对于要以更高优先级扩展/压缩的标签。

在这个例子中,我设置了低拥抱和高压缩阻力优先级,这导致为第二(黄色)标签的内容设置更多优先级/重要性。

enter image description here