【问题标题】:UILabel not respecting truncateUILabel 不尊重截断
【发布时间】:2016-06-05 18:32:01
【问题描述】:

这让我困惑了一段时间。这是我的代码:

 let label:UILabel = UILabel(frame: CGRectMake(0, 0, obTextRect.width, obTextRect.height))
            label.text = stText
            label.backgroundColor = UIColor.redColor()
            label.textAlignment = NSTextAlignment.Center
            label.numberOfLines = 0
            label.lineBreakMode = NSLineBreakMode.ByTruncatingTail
            label.font = obDrawItem.m_obFont
            label.adjustsFontSizeToFitWidth = true
            label.minimumScaleFactor = 0.1
            label.layer.drawInContext(obContext)


            CGContextRestoreGState(obContext)

这就是我得到的结果......

proceedin
g

“继续”一词不会“自动缩小”以适应宽度。 此外,如果我添加一个换行符 (\n),那么它可以正常工作。 有什么想法???

【问题讨论】:

  • 多行和比例不能一起工作。比例和截断不能一起工作。选择您要使用的选项,不要尝试将它们一起使用。
  • 我在不同的视图中得到了完全相同的代码,并且工作得非常好。评论比例或截断并不能解决问题。
  • 当您编写代码时,它可以按照文档中的说明正常工作。
  • @Sulthan 那么根据文档,上面的图片是正确的吗?那么,正确的做法是什么?

标签: ios swift2 uilabel truncate


【解决方案1】:

代码运行完全正确。为什么?

  1. 文本不会缩小,因为它适合其框架。

  2. 文本不使用截断,因为它适合其框架。

  3. 自动换行被忽略,因为单词不适合单行。

我建议您根据内容动态设置包装属性。如果文本只有一个单词,则将numberOfLines设置为1,否则设置为02-3。这将解决您的大部分问题。

let multipleWords = stText.rangeOfCharacterFromSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) != nil
label.numberOfLines = multipleWords ? 0 : 1

【讨论】:

  • 我有 100 多个具有不同行数的字符串(从 1 行到 20 行)。我不想通过它们中的每一个来查看哪些适合,哪些不适合。如果单词不能放在一行中,那么它应该缩小......这就是我所期望的。感谢您的评论
  • @GeorgeAsda 这就是问题所在,你有冲突的规则。您告诉标签使用多行,并且希望它在要使用多行时自动收缩。如果你有一个好的架构,你可以把代码放在一个地方,它在任何地方都能正常工作。
  • 这是如何“正常”工作的???当我告诉 UILabel 到 wordWrap 时,即使它有数百万行要扩展,它也会在 4 行处停止。它不尊重adjustFontToFitSize ....
  • @GeorgeAsda 不要责怪框架。正如我所说,你有相互冲突的规则。
【解决方案2】:

试试这个:

label.numberOfLines = 1

将 numberOfLines 设置为 0 会使标签变为多行。

【讨论】:

  • 这是一个多行标签...我需要它们是多行的...这就是我已经拥有的!谢谢
  • 我想你也想为你的标签设置preferredMaxLayoutWidth。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
相关资源
最近更新 更多