【问题标题】:UILabel truncate middle lines in multi-line labelUILabel 截断多行标签中的中间行
【发布时间】:2013-10-10 22:11:57
【问题描述】:

我有一个最多 3 行的 UILabel。代码如下:

_testLabel = [[UILabel alloc] init];
_testLabel.text = @"Line 11111111111111\nLine 2\nLine 3";
_testLabel.numberOfLines = 3;
_testLabel.lineBreakMode = NSLineBreakByTruncatingTail;
[_testLabel sizeToFit];
_testLabel.width -= 5;

通过调用 sizeToFit 然后减去 5,我使第 1 行换行。这反过来又将第 3 行推到了允许的范围之外,因此在“第 2 行”的末尾有一个“...”并且第 3 行没有显示。

我真正希望它截断第 1 行,而不是换行和截断第 3 行。这样,任何太长而无法适应指定宽度的行都将被截断而不是换行。

有没有办法做到这一点?

我能想到的最好的方法是在每个 '\n' 字符处拆分字符串,并为每一行设置一个单独的 UILabel,每个行的 numberOfLines 设置为 1。

编辑:

为了更清楚,这是上面示例代码中标签的样子:

Line
11111111111111
Line 2...

这是我想要的样子:

Line 11111111111...
Line 2
Line 3

【问题讨论】:

  • 在每个 '\n' 字符处分割字符串,并为每一行设置一个单独的 UILabel,每个行的 numberOfLines 设置为 1。 -- 是的,我认为你真的在这种情况下需要多个 UILabel。
  • 您是否尝试过将NSLineBreakByTruncatingMiddle 用于lineBreakMode
  • 是的,我尝试了 NSLineBreakByTruncatingMiddle,可悲的是,这不是它所做的。看起来有必要将其拆分为多个标签。唯一的其他选择是继承 UILabel 并自己重写 draw 方法......这显然需要更多的工作。

标签: ios objective-c uilabel


【解决方案1】:
【解决方案2】:

您可能想在设置文本之前计算 UILabel 的大小,然后调整换行符设置。

查看 NSString 的方法: - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context

【讨论】:

    【解决方案3】:

    你做得对。你只需要另外一行。

    将“adjustsFontSizeToFitWidth”设置为“false”,以防止标签通过更改字体大小来适应宽度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 2014-06-17
      • 1970-01-01
      • 2014-03-04
      相关资源
      最近更新 更多