多行文字没有被椭圆化

时间:2014-01-13 13:20:40

标签: ios multiline nsattributedstring text-rendering

我正在尝试在矩形内的多行上绘制椭圆化文本。

对于NSLineBreakByTruncatingTail,文档说明

  

显示该行,以便开头适合容器,行末尾的缺失文本由省略号字形表示。虽然此模式适用于多行文本,但它更常用于单行文本。

但是使用该模式我只得到一行:

With NSLineBreakByTruncatingTail

但是对于NSLineBreakByWordWrapping,我没有获得超长文本的省略号:

With NSLineBreakByWordWrapping

两张图片都使用下面相同的代码(红色背景是文字绘图矩形),当然还有相同的矩形尺寸,所以2条线条绝对适合。

NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = <<see above>>;
paragraphStyle.alignment = NSTextAlignmentNatural;
NSDictionary* drawingAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                   [UIFont fontWithName:@"HelveticaNeue" size:36],
                                   NSFontAttributeName,
                                   paragraphStyle,
                                   NSParagraphStyleAttributeName,
                                   nil];

const CGRect rect = CGRectMake(...);
[@"I do not get ellipsized in any way" drawInRect:rect withAttributes:drawingAttributes];

有没有办法将椭圆化和多线渲染结合起来,正如文档所说的那样?使用UILabel,我只需要将行数设置为1以外的其他值,但是通过代码进行文本渲染呢?

1 个答案:

答案 0 :(得分:1)

我不明白你为什么使用NSMutableParagraphStyle和drawInRect,可能我需要更多关于你正在努力工作的上下文的信息。

但是使用这种简单的技术:

UILabel *label = [[UILabel alloc] initWithFrame:(CGRect){0,0,300,100}];
label.numberOfLines = 0;
label.backgroundColor = [UIColor redColor];
label.center = self.view.center;
label.font = [UIFont fontWithName:@"HelveticaNeue" size:36];
label.textAlignment = NSTextAlignmentNatural;
label.lineBreakMode = NSLineBreakByTruncatingTail;
label.text = @"I do not get ellipsized in any way";

[self.view addSubview:label];

您将看到以下结果: enter image description here

我的建议是在这种情况下摆脱drawInRect。

相关问题