我已经研究了一天多了,老实说,我完全不明白为什么这并不像我所期望的那样有效。
我正试图让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”方法中调整大小时-它仍然不是正确的大小,字符串正在被截断,这可以在下图中看到。
注意-一旦视图被加载并且文本被填充到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
注意:-宽度应该是您想要的标签宽度。应该根据您的
UITableView
或UIView