【问题标题】:UILabel with numberOfLines and lineBreakMode带有 numberOfLines 和 lineBreakMode 的 UILabel
【发布时间】:2014-01-21 03:24:40
【问题描述】:

我正在开发一个必须同时支持 iOS6 和 iOS7 的项目。我的问题是它在不同系统上的工作方式不同。我正在尝试创建行数等于 2 的 UILabel,但是当我将其换行模式设置为 NSLineBreakByTruncatingTail 时,它的工作方式不同。

解释(numberOfLines = 2, text = @"long teexxxttt"):

    iOS7                    iOS6
      NSLineBreakByWordWrapping
 ----------              ----------
|long      |            |long      |
|teeeexxxtt|            |teeeexxxtt|
 ----------              ----------

     NSLineBreakByTruncatingTail
 ----------              ----------
|long      |            |long te...|
|teeeexx...|            |          |
 ----------              ----------
     ^                       ^
     |                       |
  correct                incorrect - shows only one line

我该如何解决?

【问题讨论】:

  • 如果想要ios7中两行的内容,可以使用NSLineBreakByWordWrapping模式
  • 确保你的标签框没有被改变,检查一下。你能打印两个版本的标签框吗?\
  • @Virussmca 它正在发生变化(但对于两个 iOS 来说都是一样的),这是问题所在吗?我在更改框架后设置这些属性。
  • @CoolMonster 同时我最后需要“...”。
  • @TimurBernikowich:你能在设置属性后为这两个版本打印标签框吗?

标签: ios objective-c swift cocoa-touch uilabel


【解决方案1】:

我知道这是一个老问题,但我最近遇到了同样的问题。我发现在约束条件下,我必须设置首选宽度才能使省略号正常运行:

yourLabel.preferredMaxLayoutWidth = width; 

UILable.preferredMaxLayoutWidth

【讨论】:

  • 太棒了!你拯救了我的一天...我的 uilabel 的最后一行总是 AWOL... 这个解决方案帮助解决了问题
【解决方案2】:

问题在于 iOS6 和之前的版本不会使用自定义 UIFont 和 NSLineBreakByTruncatingTail 更新多行 UILabel,但您可以使用自动调整大小或自动布局来归档相同的结果。

【讨论】:

    【解决方案3】:

    斯威夫特 2.1

    yourLabel.text = "your text"
    yourLabel.numberOfLines = 0
    yourLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
    yourLabel.sizeToFit()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多