UILabel 截尾并跳过不完整的单词
UILabel truncate tail and skip not complete word
我只有一行UILabel
。它的宽度 = 屏幕宽度,现在的内容是(UILabel
的内容可以更改)
You have 30 seconds to make an impression during an interview
目前,我的UILabel
被截断了尾巴,单词"duration"不完整
self.nameLabel.lineBreakMode = NSLineBreakByTruncatingTail;
我想要的是我想要我的UILabel
仍然截断尾部并且只显示完整的单词。
喜欢下图
如有任何帮助或建议,我们将不胜感激。
理想情况下,这是不可能的,使用默认的 UILabel,当您将 lineBreakMode 设置为 TruncatingTail 时,根据 letter/word 所需的 space,OS 将截断它,一种解决方案要解决此问题,您可以根据匹配情况使用以下属性。
Minimum Font Scale -- 使用此 属性 指定当前字体大小的最小乘数,在显示标签文本时产生可接受的字体大小.如果为此 属性 指定值 0,则使用当前字体大小作为最小字体大小。
最小字体大小 -- 当绘制的文本可能不适合标签的边界矩形时,您可以使用此 属性 来防止接收器缩小将字体大小调整到无法辨认的程度。
我不确定,但试试看:
nameLabel.adjustsFontSizeToFitWidth = NO;
nameLabel.lineBreakMode = NSLineBreakByWordWrapping;
或
如果您使用的是情节提要,请按照以下步骤操作,我试过了并且效果很好
- 打开属性检查器
将换行符改为截尾然后
将自动收缩更改为最小字体大小
这是我在应用这些属性前后的标签截图
新输出
你可以这样做:
let labelWidth = CGRectGetWidth(label.bounds)
let str = "You will have 30 seconds till you give us a good impression" as NSString
let words = str.componentsSeparatedByString(" ")
var newStr = "" as NSString
for word in words{
let statement = "\(newStr) \(word) ..." as NSString
let size = statement.sizeWithAttributes([NSFontAttributeName:label.font])
if size.width < labelWidth {
newStr = "\(newStr) \(word)"
}
else{
break
}
}
newStr = newStr.stringByAppendingString(" ...")
self.label.text = newStr as String
想法是:我们拆分单词并尝试检查宽度,同时从开头附加字符串“...”,直到我们找到一个将超过大小的单词,如果我们停止并使用这个新的字符串
我只有一行UILabel
。它的宽度 = 屏幕宽度,现在的内容是(UILabel
的内容可以更改)
You have 30 seconds to make an impression during an interview
目前,我的UILabel
被截断了尾巴,单词"duration"不完整
self.nameLabel.lineBreakMode = NSLineBreakByTruncatingTail;
我想要的是我想要我的UILabel
仍然截断尾部并且只显示完整的单词。
喜欢下图
如有任何帮助或建议,我们将不胜感激。
理想情况下,这是不可能的,使用默认的 UILabel,当您将 lineBreakMode 设置为 TruncatingTail 时,根据 letter/word 所需的 space,OS 将截断它,一种解决方案要解决此问题,您可以根据匹配情况使用以下属性。
Minimum Font Scale -- 使用此 属性 指定当前字体大小的最小乘数,在显示标签文本时产生可接受的字体大小.如果为此 属性 指定值 0,则使用当前字体大小作为最小字体大小。
最小字体大小 -- 当绘制的文本可能不适合标签的边界矩形时,您可以使用此 属性 来防止接收器缩小将字体大小调整到无法辨认的程度。
我不确定,但试试看:
nameLabel.adjustsFontSizeToFitWidth = NO;
nameLabel.lineBreakMode = NSLineBreakByWordWrapping;
或
如果您使用的是情节提要,请按照以下步骤操作,我试过了并且效果很好
- 打开属性检查器
将换行符改为截尾然后
将自动收缩更改为最小字体大小
这是我在应用这些属性前后的标签截图
新输出
你可以这样做:
let labelWidth = CGRectGetWidth(label.bounds)
let str = "You will have 30 seconds till you give us a good impression" as NSString
let words = str.componentsSeparatedByString(" ")
var newStr = "" as NSString
for word in words{
let statement = "\(newStr) \(word) ..." as NSString
let size = statement.sizeWithAttributes([NSFontAttributeName:label.font])
if size.width < labelWidth {
newStr = "\(newStr) \(word)"
}
else{
break
}
}
newStr = newStr.stringByAppendingString(" ...")
self.label.text = newStr as String
想法是:我们拆分单词并尝试检查宽度,同时从开头附加字符串“...”,直到我们找到一个将超过大小的单词,如果我们停止并使用这个新的字符串