【问题标题】:UILabel line breaks too early on iOS 11iOS 11 上的 UILabel 换行过早
【发布时间】:2018-04-10 10:22:38
【问题描述】:

我有一个带有单元格表格的 iOS 11 应用程序。

在这个单元格中,我有一个 UILabel。

UILabel 似乎“决定”以至少 2 个单词保持底线的方式换行(无论 BreakLineMode 是什么!)。

我知道使用 - 添加不间断空格 (U+00A0) - 太贵了

在 NSUserDefaults 上使用 NSAllowsDefaultLineBreakStrategy NO - APPLE 不允许

我可以做些什么来解决这个问题?

在这张图片中,您可以看到第二行中的第一个单词,可能出现在第一行,但由于某种原因下降到第二行...

编辑:

这不是宽度问题,这是 iOS 11 新 UILabel 逻辑(!)的问题,它不允许在新行上出现孤立词(一个词),只有两个词,因为他们认为它看起来更好。它没有。但是必须有一种方法可以让 UILabel 在 iOS 11 上运行,就像在 iOS 10 及更低版本上一样。

【问题讨论】:

  • 第二行,是否包含一个单词?
  • 你想要单行标签(或者你想要多行标签,如果文本长度超过可用空间)
  • 您似乎需要增加标签的宽度才能使其正确中断

标签: ios iphone uilabel


【解决方案1】:

我发现了一个 hack -

在字符串末尾添加大量空格(如 10 - 20)将使 UILabel “认为”该行足够长,因此会在底行留下一个单词。 (而不是 2 所以第一行不会提前中断)

我不喜欢黑客,但目前我只有这些,如果有人有不同的答案,我会很乐意接受它而不是这个

【讨论】:

    【解决方案2】:

    你可以添加这三行代码 -

    labelName.adjustsFontSizeToFitWidth = true
    labelName.minimumScaleFactor = 0.3
    
    labelName.numberOfLines = 0 // or you can set it 1 or 2
    

    【讨论】:

      【解决方案3】:

      就我而言,我可以通过使用 textview 来解决这个问题。 UITextView 允许孤儿,如果禁用滚动,则根据固有大小调整大小;如果禁用交互,则 UITextView 会像标签一样工作,这在标签中也被禁用,因此它将转发所有触摸。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-30
        • 1970-01-01
        • 2019-12-15
        • 1970-01-01
        • 2015-05-30
        相关资源
        最近更新 更多