UILabel截断尾部并跳过不完整的单词
我有一行UILabel
。 它有宽度=屏幕宽度,现在的内容是( UILabel
的内容可以改变)
你有30秒的时间在面试中留下印象
目前,我的UILabel
是截尾的,而“持续时间”这个词并不完整
self.nameLabel.lineBreakMode = NSLineBreakByTruncatingTail;
我想要的是我希望我的UILabel
仍然截断尾部, 只显示完整的单词。
如下图所示
任何帮助或建议将非常感谢。
你可以这样做:
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,当你将lineBreakMode设置为TruncatingTail时,根据操作系统将截断它的字母/单词所需的空间,一个解决问题的解决方案,您可以根据您的匹配使用以下属性。
最小字体比例 – 使用此属性指定当前字体大小的最小倍数,以产生在显示标签文本时使用的可接受字体大小。 如果为此属性指定值0,则使用当前字体大小作为最小字体大小。
最小字体大小 – 绘制可能不适合标签边界矩形的文本时,可以使用此属性来防止接收器将字体大小减小到不再清晰的程度。
我不确定但是尝试一下:
nameLabel.adjustsFontSizeToFitWidth = NO; nameLabel.lineBreakMode = NSLineBreakByWordWrapping;
要么
如果你正在使用故事板按照这些步骤我试过这个,它工作正常
- 打开属性检查器
-
然后将换行符更改为截断尾部
-
将AutoShrink更改为最小字体大小
这是我在应用这些属性之后和之前的标签截图
新产出