ios - 根据表格 View 单元格中的内容更改 uilabel 高度

标签 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

但他们都没有工作。

是否有任何其他方法(可能通过标签框更改大小)?

最佳答案

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

  • 分配和实现 TableView 数据源和委托(delegate)
  • UITableViewAutomaticDimension 分配给 rowHeight 和 estimatedRowHeight
  • 实现委托(delegate)/数据源方法(即 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(&换行模式=截尾)
  • 设置关于其父 View /单元格容器的所有约束(顶部、底部、左右)。
  • 可选:设置标签的最小高度,如果您希望标签覆盖的最小垂直区域,即使没有数据也是如此。

enter image description here

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

注意:如果您有多个具有动态长度的标签(UIElements),应根据其内容大小进行调整:为您选择的标签调整“Content Hugging and Compression Resistance Priority”想要以更高的优先级展开/压缩。

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

enter image description here

关于ios - 根据表格 View 单元格中的内容更改 uilabel 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48264303/

相关文章:

swift - 在 Swift 的 ViewController 中禁用 IQKeyboardManager

ios - 对所有当前播放的视频执行一个 AVPlayer 的 AVPlayerItemDidPlayToEndTime 操作

swift - 如何将 UInt8 转换为字节 Swift 4

iOS - 从 UITableView 崩溃中删除行

iphone - UITableView 编辑状态的自定义按钮

ios - 单击按钮将项目添加到另一个 View Controller TableView

ios - 如何删除 UITableView 顶部的灰线

iphone - UILabel 未以编程方式更新

ios - Xcode 无法调试 View 框架

ios - 在移动的 UIView 中通过区域传递触摸事件