nsstring - UILabel 所需的高度取决于字符串长度(Swift、iOS 8)

标签 nsstring swift uilabel ios8

我正在努力根据 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/

相关文章:

objective-c - 凯撒移位加密 Objective C

swift - Firebase/Swift 两个数据库连接

ios - 命令 CompileXIB 失败,退出代码非零

ios - Swift - 来自 URL 的 UILabel

ios - 具有相对字体大小的 UILabel sizeToFit 不起作用

iphone - 如何以不同方式格式化 UILabel 字符串中的不同字符?

iphone - NSString stringWithCharacters Unicode 问题

ios - NSString stringWithFormat 返回类型,为什么是 "id"?

ios - 每个属性只获取一次

ios - 在字符串的 5 个字符之前截断 UILabel 文本