根据UILabel内容调整UITableViewCell高度

时间:2015-10-26 19:05:21

标签: ios iphone swift uitableview swift2

我一直在调查这一天超过一天,我可以诚实地说,我完全不知道为什么这样做不像我期望的那样。

我正在尝试将UITableViewCell扩展为根据其中的UILabel选择正确的大小。我使用以下代码来确定UILabel所需的大小:

extension UILabel {

    func requiredHeight() -> CGFloat{

        let label:UILabel = UILabel(frame: CGRectMake(0, 0, self.frame.width, CGFloat.max))
        label.text = self.text
        label.numberOfLines = 0
        label.font = self.font

        label.sizeToFit()


        print("Final Size - \(label.frame.height)")
        return label.frame.height + 10
    }
}

我的问题是,尽管有这个大小 - 当Cell在'heightForRowAtIndexPath'方法中调整大小时 - 它仍然不是正确的大小并且字符串被截断,这可以在下图中看到。

enter image description here

要注意 - 一旦视图加载并且文本已填充到UILabel中,我会收集所需的单元格大小。

requiredHeight = overviewLabel.requiredHeight()
        if requiredHeight > overviewCell.frame.height {
            expander.hidden = false
        } else {
            expander.hidden = true
        }

关于如何解决这个问题的任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

试试这个代码段。只需提供字体和大小的确切名称

  

Swift 3.x

func requiredHeight() -> CGFloat{
    let font = UIFont(name: "Helvetica", size: 16.0)
    let label:UILabel = UILabel(frame: CGRect(x:0, y:0, width:200, height:CGFloat.greatestFiniteMagnitude))
    label.numberOfLines = 0
    label.lineBreakMode = NSLineBreakMode.byWordWrapping
    label.font = font
    label.text = self.text
    label.sizeToFit()
    return label.frame.height + //Add some space as a part of your bottom and top constraint
}
  

Swift 2.2

func requiredHeight() -> CGFloat{
    let font = UIFont(name: "Helvetica", size: 16.0)
    let label:UILabel = UILabel(frame: CGRectMake(0, 0, 200, CGFloat.max))
    label.numberOfLines = 0
    label.lineBreakMode = NSLineBreakMode.ByWordWrapping
    label.font = font
    label.text = self.text
    label.sizeToFit()
    return label.frame.height + //Add some space as a part of your bottom and top constraint
}

假设您的标签的顶部和底部约束分别为5和5,它们将return语句设为

return label.frame.height + 10

注意: - 宽度应该是您想要标签的宽度。它应该根据您的UITableViewUIView