在 UITableview 中自动布局多行标签 // Swift 4.2

Auto layout multiple lines label in UITableview // Swift 4.2

我写了这样的扩展来在 UITableview 中显示我的数据。但有时我的数据可能包含超过 1 行,我需要创建一些内容来显示完整内容。我怎样才能更改我的代码(如下)来做到这一点?

extension ViewController: UITableViewDataSource, UITableViewDelegate {

    // Define no of rows in your tableView
    func tableView(_ chatHistoryTable: UITableView, numberOfRowsInSection section: Int) -> Int {
        return messagesData.count
    }

    func tableView(_ chatHistoryTable: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = chatHistoryTable.dequeueReusableCell(withIdentifier: "userMessage")! as UITableViewCell

        cell.textLabel!.text = messagesData[indexPath.row]
        cell.textLabel!.textAlignment = .right

        return cell;
    }

}

我想我也应该为 UITableViewCell 写一些东西,但我不知道,我是对的。

请帮我解答这个问题。

这里需要做两处改动。

  • 初始设置 Self Sizing Cell 的估计高度和自动尺寸,在您的页面加载时调用以下行。

      tableView.estimatedRowHeight = 44.0
      tableView.rowHeight = UITableView.automaticDimension
    

    例如

     @IBOutlet weak var yourTableviewName: UITableView!{
    didSet{
        yourTableviewName.tableFooterView = UIView()
        yourTableviewName.estimatedRowHeight = 44.0
       yourTableviewName.rowHeight = UITableView.automaticDimension
        }
      }
    
  • 次要用于自动换行,numberOfLines 用于标签。按照你的 cellforRow 方法的下面一行

       func tableView(_ chatHistoryTable: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = chatHistoryTable.dequeueReusableCell(withIdentifier: "userMessage")! as UITableViewCell
         cell.textLabel!.numberOfLines = 0
        cell.textLabel!.lineBreakMode = .byWordWrapping
        cell.textLabel!.text = messagesData[indexPath.row]
        cell.textLabel!.textAlignment = .right
    
        return cell;
    }
    
    }
    

第 1 步。在自定义 Table View Cell

中添加一连串不间断的垂直约束

第2步.设置单元格估计高度

tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension

步骤3:Make标签支持多行

textLabel.LineBreakMode = UILineBreakMode.WordWrap;
textLabel.Lines = 0;