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

对于NSLineBreakByTruncatingTail,文档说明



但是在这种模式下,我只会得到一行:

但是,对于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以外的值,那么通过代码呈现文本呢?

最佳答案

我不明白您为什么要使用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];

您将看到以下结果:

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

08-08 07:47