如何使用 UILabel 支持自动调整 UITableViewCell 的大小

Posted

技术标签:

【中文标题】如何使用 UILabel 支持自动调整 UITableViewCell 的大小【英文标题】:How to support auto resizing UITableViewCell with a UILabel in it 【发布时间】:2015-12-18 04:29:25 【问题描述】:

我试图弄清楚如何为包含 uitextview 的 tableview 单元格获取正确的高度,以便显示 uitextview 中的所有内容。 textview 不可编辑且不可滚动,这意味着 uitextview 的字符串是已知的。我尝试简单地返回 heightForRowAtIndexPath 中故事板中的 tableview 单元格的高度,但如果它太大,则会切断内容。我还尝试计算 heightForRowAtIndexPath 中 textView 的高度,但它在运行时抛出错误:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
        let cellInfo = UserCellsArray[indexPath.section]
        switch cellInfo 
        case .userInfo: return 104
        case .ubio:
            let cell = tableView.dequeueReusableCellWithIdentifier(cellInfo.description, forIndexPath: indexPath) as! UserProfileTableViewCell //error
            let oldHeight = cell.userBio.frame.size.height
            cell.userBio.text = self.bio
            var bodyframe = cell.userBio.frame
            bodyframe.size = cell.userBio.contentSize
            let newHeight = cell.userBio.contentSize.height
            return tableView.rowHeight - oldHeight + newHeight
        
     

【问题讨论】:

您使用 TextView 而不是 UILabel 的任何具体原因? @Shripada 除了我不确定如何在 tableviewcell 中使用自动布局格式化它之外,考虑到标签中会添加大量文本。如果它使问题更容易,我可以轻松切换到标签。 是的,你可以有一个可调整大小的 UILabel,使用 UITableView 的约束和一些设置,我会尝试在一段时间内发布答案 【参考方案1】:

这是你需要做的:

    需要在单元格中使用自动布局并为 UILabel 设置适当的约束。由于我们要调整 UILabel 的大小以适合设置给它的文本,因此我们将行数值设置为 0。然后将前导、尾随、底部和顶部约束设置为 UILabel。请在此处查看屏幕截图:

    在您的 Table View 控制器中 > viewDidLoad 调用这两行代码:

      tableView.estimatedRowHeight = 50.0  //Give an approximation here
      tableView.rowHeight = UITableViewAutomaticDimension
    

    并实现委托方法:

     override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
        return UITableViewAutomaticDimension
      
    

【讨论】:

以上是关于如何使用 UILabel 支持自动调整 UITableViewCell 的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局调整 UILabel 宽度以适合文本?

自动调整 UILabel 文本大小以适应 UILabel 宽度

具有自动布局的多行UILabel,如何在不更改标签框架的情况下根据内容调整字体大小?

如何设置自动布局,以便 UILabel 调整大小并根据需要移动其他视图

根据 UILabel 文本和图像自动调整单元格大小,例如聊天

如何根据 UILabel 动态调整 CollectionViewCell 的大小