【发布时间】: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