我已经研究了一天多了,老实说,我完全不明白为什么这并不像我所期望的那样有效。
我正试图让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
    }
}

我的问题是,尽管这个大小-当单元格在“heightForRowAtIndexPath”方法中调整大小时-它仍然不是正确的大小,字符串正在被截断,这可以在下图中看到。
ios - 根据UILabel内容调整UITableViewCell的高度-LMLPHP
注意-一旦视图被加载并且文本被填充到UILabel中,我就收集所需的单元格大小。
requiredHeight = overviewLabel.requiredHeight()
        if requiredHeight > overviewCell.frame.height {
            expander.hidden = false
        } else {
            expander.hidden = true
        }

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

最佳答案

试试这个片段。只需提供字体和大小的确切名称
斯威夫特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
}

银行代码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
}

假设标签的top和bottom约束分别为5和5,则返回语句为
return label.frame.height + 10

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

10-04 10:47
查看更多