我正在努力根据 UILabel 可以接受的可变大小文本获得所需的高度。经过数小时的研究,我还没有找到实现这一目标的可行方法。目前我的代码如下:
func getHeightForTitle(postTitle: NSString) -> CGFloat {
// Get the height of the font
let constraintSize = CGSizeMake(self.cellTextWidth, CGFloat.max)
let attributes = [NSFontAttributeName: [UIFont.systemFontOfSize(16.0)]]
let labelSize = postTitle.boundingRectWithSize(constraintSize,
options: NSStringDrawingOptions.UsesLineFragmentOrigin,
attributes: attributes,
context: nil)
return labelSize.height
}
然而,这会引发以下错误:
2014-08-02 12:09:37.370 Testing App[8365:351906] - [_TtCSs23_ContiguousArrayStorage00007FD26C15F708 pointSize]: unrecognized selector sent to instance 0x11e640050
这总是在 let labelSize = postTitle... 方法中抛出,我相信它取决于属性变量。但是我可能错了。感谢任何帮助,非常感谢!
请注意:这是针对 iOS 8、Swift 开发项目。
最佳答案
两个观察。首先,您的代码有什么问题是这一行不是 Swift:
let attributes = [NSFontAttributeName: [UIFont.systemFontOfSize(16.0)]]
等号后面的内容是 Objective-C,Swift 无法解释它。移除 UIFont
调用周围的方括号;你已经把它变成了一个数组,这是你看到的错误的来源。
其次,更重要的是,有许多更简单的方法可以做到这一点,让标签告诉您所需文本的大小:
将文本放入标签中,并在标签上调用
sizeToFit()
。将文本放入标签中,并在标签上以所需的宽度和较大的高度调用
sizeThatFits()
。在自动布局下,将标签的
preferredMaxLayoutWidth
设置为所需的宽度,并将文本放入标签中;它会自行调整大小。
但是,如果没有必要,我强烈建议您不要这样做。标签已经在自动布局下自动调整大小,在 iOS 8 中有一个新功能,表格单元格将根据其内容自动调整其高度,因此现在很少需要预先测量标签的尺寸。
关于nsstring - UILabel 所需的高度取决于字符串长度(Swift、iOS 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25094421/