【问题标题】:Truncate part of text in UILabel截断 UILabel 中的部分文本
【发布时间】:2013-12-23 10:37:00
【问题描述】:

我的要求是我需要在标签中显示文本,如果文本的长度太大而无法容纳在一行中,我需要在最后截断它,这样只有最后几个字符(通常是一个数字 b/w 1-1000,因此文本长度可能会有所不同。)是可见的,并且它之前的文本被截断为“...”。

所以文本看起来像“abcdefgijk...10”

有什么方法可以实现吗?

【问题讨论】:

  • 试试这个 label.lineBreakMode = NSLineBreakByTruncatingMiddle;
  • 我不能使用中间截断,因为我只需要将最后几个字符显示为“abcdefgijk...10”。但是 NSLineBreakByTruncatingMiddle 会给出类似 "abcde...lmn10"
  • 我认为这篇文章会有所帮助Truncate UILabel text before 5 character of string

标签: ios objective-c ios7 uilabel text-formatting


【解决方案1】:

斯威夫特 4:

如果有人像我一样遇到这个问题,

你需要设置你的label.numberOfLines = 1

如果您将其设置为 0,它将在空格处截断。

所以你的代码应该看起来像

    label.numberOfLines = 1
    label.lineBreakMode = .byTruncatingTail
    label.adjustsFontSizeToFitWidth = false

【讨论】:

    【解决方案2】:

    在故事板中

    1. 选择要截断字符的标签。

    2. 选择属性检查器。

    3. 在标签属性下。您可以找到换行符

    完成。

    【讨论】:

      【解决方案3】:

      对于所有寻找最新解决方案的人,swift 3:

      yourLabel.lineBreakMode = .byTruncatingMiddle;
      

      【讨论】:

        【解决方案4】:
        UILabel *contentLabel = [[UILabel alloc]initWithFrame:CGRectMake(50,100, 150, 30)];
        contentLabel.text = @"abcdefghijklmnopqrstuvwxyz10";
        contentLabel.lineBreakMode = NSLineBreakByTruncatingMiddle;
        

        将此标签添加到您的显示器。你应该得到类似这样的输出

        abcdefghijklmnopq...10
        

        【讨论】:

          【解决方案5】:

          您可以从查找可以放在一行中的字符长度开始,比如“n”个字符。您可以借助此链接确定“n”How to know if NSString fits in UILabel or not and index of the last string which fits?。接下来,找到字符串的长度。如果超过 n,则提取最后两个字符。例

          NSString * fooString = @"a very long string";
          NSString * s2 = [fooString substringWithRange:NSMakeRange([fooString length]-3, 2)];
          NSString * s1 = [fooString substringWithRange:NSMakeRange(0 , n-5)];
          NSString * newString = [NSString stringWithFormat:@"%@...%@",s1,s2];
          

          【讨论】:

          • 这里的n 是什么意思?是n = [fooString length] 吗?
          • 不,这里 n 是该行中可以出现的最大字符数
          【解决方案6】:

          试试这个:

           label.lineBreakMode = NSLineBreakByTruncatingMiddle;
          

          UILineBreakModeMiddleTruncation 已从 iOS 6.0 中弃用。

          【讨论】:

          • 克里希纳-巴尔拉姆在一起是不是巧合。非常感谢您的回答和更正
          【解决方案7】:

          这里是如何使用它,NSLineBreakByTruncatingMiddle

          UILabel *temp = [[UILabel alloc]initWithFrame:CGRectMake(5,75, 100, 50)];
          [temp setBackgroundColor:[UIColor lightGrayColor]];
          temp.lineBreakMode = NSLineBreakByTruncatingMiddle;
          temp.text = @"HelloBoss997";
          

          输出: Hello...s997

          【讨论】:

            【解决方案8】:

            如果你使用的是 XIB 文件..

            select --> UILable 和 选择 --> 属性检查器标签并更改为换行符-->截断尾部

            截断字符的简单方法...

            【讨论】:

              【解决方案9】:

              我们有不同的 UILabel 换行模式,比如

              截断头部, 截断中间, 截尾

              在 Xib 中,您可以随意设置换行模式

              【讨论】:

              • 是的,我们是。但它们并没有让我们完全控制确切的“...”位置。
              【解决方案10】:

              NSString 类中有很多方法使用-length,然后使用其中任何一个

              – substringFromIndex:
              – substringWithRange:
              – substringToIndex:
              

              使用 NSString stringwithFormat 创建一个临时字符串,将您从 substringTo 索引中获得的所需字符放入“.....”,然后将字符串中的数字放入 substringFromIndex。

              希望对你有帮助

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-05-09
                • 1970-01-01
                • 2012-07-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-10-02
                • 1970-01-01
                相关资源
                最近更新 更多