在 Swift 中,我如何知道单词是否包含在 UILabel 中

In Swift, how do I know if words are wrapped in an UILabel

在Swift中,不知道有没有办法知道一个单词是否被换行。例如,我有一个 UILabel.

let label = UILabel()
label.text = "Hey! Hello World!"
label.areWordsWrapped()

如果文字显示如下:

Hey! Hell
o World!

//label.areWordsWrapped() should return true

如果这样:

Hey! Hello
World!

//label.areWordsWrapped() should return false

是否有函数或 属性 来实现?

你可以试试这个,不一定完美

extension UILabel {
func areWordsWrapped()->Bool {
    let fontAttributes: [NSAttributedString.Key : Any] = [NSAttributedString.Key.font: self.font!]
    let splitText: [String] = self.text!.split {[=10=] == " "}.map(String.init)
    for text in splitText {
        let width = text.size(withAttributes: fontAttributes).width
        if width > self.frame.width {
            return true
        }
    }
    return false
}
}

编辑:

换行换行会失败

如果使用默认换行就可以了

如果你使用字符换行,我认为几乎可以肯定它会被换行,因为如果没有 enter/new 行

,几乎不可能在每一行中具有相同的宽度