UILabel截断尾部并跳过不完整的单词

时间:2016-05-24 10:00:41

标签: ios uilabel

我有一行UILabel。它的宽度=屏幕宽度,现在的内容是(UILabel的内容可以改变)

  

在面试中你有30秒的时间留下印象

目前,我的UILabel被截断尾部,"期限" 一词未完成

self.nameLabel.lineBreakMode = NSLineBreakByTruncatingTail;

我想要的是我希望我的UILabel 仍然截断尾部,显示完整的字词。
如下图所示

enter image description here

非常感谢任何帮助或建议。

3 个答案:

答案 0 :(得分:4)

您可以这样做:

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

理念是:我们拆分单词并尝试检查宽度,同时从头开始追加+字符串&#34; ...&#34;直到我们找到一个超过大小的单词,在我们停止并使用这个新字符串的情况下

答案 1 :(得分:1)

我不确定但是尝试一下:

nameLabel.adjustsFontSizeToFitWidth = NO;
nameLabel.lineBreakMode = NSLineBreakByWordWrapping;

OR

如果您正在使用故事板,请按照以下步骤操作,我尝试了这个并且工作正常

  • 打开属性检查器
  • 将换行符更改为截断尾部

  • 将AutoShrink更改为最小字体

enter image description here

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

enter image description here

新输出

enter image description here

答案 2 :(得分:0)

理想情况下,使用默认UILabel,当你将lineBreakMode设置为TruncatingTail时,这是不可能的,这取决于操作系统将截断它的字母/单词所需的空间,一个解决问题的解决方案可以使用以下属性,具体取决于你的匹配。

最小字体比例 - 使用此属性指定当前字体大小的最小乘数,以产生在显示标签文本时使用的可接受字体大小。如果为此属性指定值0,则使用当前字体大小作为最小字体大小。

最小字体大小 - 在绘制可能不适合标签边界矩形的文本时,您可以使用此属性来防止接收器将字体大小减小到它的位置不再清晰。