我一直在调查这一天超过一天,我可以诚实地说,我完全不知道为什么这样做不像我期望的那样。
我正在尝试将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'方法中调整大小时 - 它仍然不是正确的大小并且字符串被截断,这可以在下图中看到。
要注意 - 一旦视图加载并且文本已填充到UILabel中,我会收集所需的单元格大小。
requiredHeight = overviewLabel.requiredHeight()
if requiredHeight > overviewCell.frame.height {
expander.hidden = false
} else {
expander.hidden = true
}
关于如何解决这个问题的任何建议将不胜感激。
答案 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
注意: - 宽度应该是您想要标签的宽度。它应该根据您的UITableView
或UIView