在 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 行
,几乎不可能在每一行中具有相同的宽度
在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 行
,几乎不可能在每一行中具有相同的宽度