【问题标题】:How to add dots to UILabel if text does not fit frame如果文本不适合框架,如何向 UILabel 添加点
【发布时间】:2013-10-13 22:01:08
【问题描述】:

我有一个带有多行 UILabel 的单元格,但是当文本的标签不适合框架时,不会显示点。我该如何解决这个问题?

【问题讨论】:

  • 你真的需要为此添加赏金吗?这类问题有数百个答案。 stackoverflow.com/questions/11302165/…google.co.uk/… 简单的谷歌搜索。
  • @Popeye 我尝试根据以前的答案解决此问题,但这对我没有帮助。 PS:我的标签属性“numberOfLines”设置为“2”,如果等于“1”,则有效。
  • numberOfLines 默认为 1。如果您不知道确切的 numberOfLines 并使用 UILable 的 sizeToFit 方法,请尝试将其设置为 0。
  • @iProgrammer 我已经固定了最大行数 - 2。而且 sizeToFit 一直都很糟糕。

标签: ios objective-c uilabel


【解决方案1】:

你试过了吗?

Swift 5 之前的版本

yourLabel.adjustsFontSizeToFitWidth = NO;
yourLabel.lineBreakMode = NSLineBreakByTruncatingTail;

Swift 5

yourLabel.adjustsFontSizeToFitWidth = false
yourLabel.lineBreakMode = .byTruncatingTail

之前的iOS6使用UILineBreakModeTailTruncation

【讨论】:

  • 我认为正确的选项是NSLineBreakByTruncatingTail。您在回答中提到的那个已被弃用。
  • 我尝试使用 NSLineBreakByTruncatingTail,而不是 UILineBreakModeTailTruncation。
  • 这不适用于多行标签。 lineBreakMode 应该是 NSLineBreakByWordWrappingNSLineBreakByCharWrapping
  • @brunobasas 感谢您的编辑。无论如何,一些读者可能会发现原始答案很有用,因为它可能取决于 ios 版本。在答案中保留两种选择会很好:)
  • 我的解释还有另一个类似的问题:stackoverflow.com/questions/20903975/…
【解决方案2】:

如果您使用的是AttributedStrings,请注意您必须将.lineBreakMode 设置为NSMutableParagraphStyle

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineBreakMode = .byTruncatingTail

// Add paragraphStyle to attributes, create AttributedString...

【讨论】:

  • 帅哥!
【解决方案3】:

对于 swift 2.0,它将是:

yourLabel.adjustsFontSizeToFitWidth = false;
yourLabel.lineBreakMode = NSLineBreakMode.ByTruncatingTail

对于 swift 4.0,它将是:

yourLabel.adjustsFontSizeToFitWidth = false;
yourLabel.lineBreakMode = NSLineBreakMode.byTruncatingTail

【讨论】:

  • 在 Swift 4 中只需要给 'b' 小。 like(yourLabel.adjustsFontSizeToFitWidth = false; yourLabel.lineBreakMode = NSLineBreakMode.byTruncatingTail)
【解决方案4】:

如果换行模式不适合您,另一种选择是实际计算您的字符串将占用的长度,如果它比标签大小长,请自己添加“...”。

你将不得不使用下面的代码来处理多行(但想法是相似的)

比如带你标签(比如detailLabel)

UILabel* detailLabel = cell.detailTextLabel;
CGSize expectedDetailLabelSize = [detailLabel.text sizeWithFont:detailLabel.font
                                             constrainedToSize:maximumLabelSize
                                                 lineBreakMode:detailLabel.lineBreakMode];

【讨论】:

  • 我知道这个解决方案,但同时我希望有更简单的方法。)
【解决方案5】:

适用于 SWIFT 3+

label.adjustsFontSizeToFitWidth = false;
label.lineBreakMode = NSLineBreakMode.byTruncatingTail;

【讨论】:

    【解决方案6】:

    Swift 4.0 示例:

    extension String {
      /*
       Truncates the string to the specified length number of characters and appends an optional trailing string if longer.
       - Parameter length: Desired maximum lengths of a string
       - Parameter trailing: A 'String' that will be appended after the truncation.
    
       - Returns: 'String' object. 
      */
      func trunc(length: Int, trailing: String = "…") -> String {
        return (self.count > length) ? self.prefix(length) + trailing : self
      }
    }    
    
    let str = "I might be just a little bit too long".truncate(10)
    

    参考。链接String Truncate

    【讨论】:

      猜你喜欢
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2017-02-03
      • 1970-01-01
      相关资源
      最近更新 更多