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更改为最小字体大小

在此处输入图像描述

这是我在应用这些属性之后和之前的标签截图

在此处输入图像描述

新产出

在此处输入图像描述