Ios UILabel截断多行标签中的中间行

Ios UILabel截断多行标签中的中间行,ios,objective-c,uilabel,Ios,Objective C,Uilabel,我有一个UILabel,最多有3行。下面是代码: _testLabel = [[UILabel alloc] init]; _testLabel.text = @"Line 11111111111111\nLine 2\nLine 3"; _testLabel.numberOfLines = 3; _testLabel.lineBreakMode = NSLineBreakByTruncatingTail; [_testLabel sizeToFit]; _testLabel.width -=

我有一个UILabel,最多有3行。下面是代码:

_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行,而不是环绕第1行并截断第3行。这样,任何太长而不适合指定宽度的行都将被截断而不被包装

有没有办法做到这一点

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

编辑:

更清楚地说,下面是上面示例代码中的标签:

Line
11111111111111
Line 2...
下面是我希望它看起来的样子:

Line 11111111111...
Line 2
Line 3

检查NSLineBreakMode的枚举数


您可能希望在设置UILabel的文本之前计算其大小,然后调整换行设置

请参见NSString的方法:
-(CGRect)boundingrect with size:(CGSize)大小选项:(NSStringDrawingOptions)选项属性:(NSDictionary*)属性上下文:(NSStringDrawingContext*)上下文

你做得对。你只需要另外一条线


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

在每个“\n”字符处拆分字符串,并为每行设置一个单独的UILabel,每行的numberOfLines设置为1。-是的,我想在这种情况下你真的需要多个UILabel。你有没有尝试过在
linebreakbytruncatingmiddle
中使用
linebreakbytruncatingmiddle
?是的,我尝试过NSLineBreakByTruncatingMiddle,但遗憾的是,它并不是这样做的。看起来有必要将其拆分为多个标签。唯一的另一个选择是将UILabel子类化并超越draw方法本身。。。这显然是更多的工作。不幸的是,这些选项都不能满足我的需要。