12

我需要显示带有两种不同样式(不同颜色,部分文本加粗)的文本的 UILabel。这很容易通过使用属性文本属性解决。

我的问题是文本可能会或可能不会比我可以放入标签的长度长。当使用纯文本时,一切都按照我想要的方式工作。文本被自动换行以适应标签中的行数,如果/当文本长于标签中显示的长度时,尾部将被截断。

当我切换到使用属性文本时,我只能在尾部截断和自动换行之间进行选择。如果我想要截断尾部,则标签仅呈现带有截断尾部的单行(即使它可以容纳 10 行)。如果我选择自动换行,则尾部不会被截断,但标签中无法容纳的行根本不会显示。

我的内容字符串不包含任何换行符,它只是一个长字符串。

4

4 回答 4

14

我在设置行间距时错过了截断,但我所要做的就是将换行模式添加到段落样式

NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init];
[paragrahStyle setLineSpacing:1.5];
[paragrahStyle setLineBreakMode:NSLineBreakByTruncatingTail];
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:@"Long string that truncates"];
[attributedText addAttribute:NSParagraphStyleAttributeName value:paragrahStyle range:NSMakeRange(0, [attributedText length])];

self.label.attributedText = attributedText;
于 2014-05-28T09:58:17.397 回答
5

他们让我能够让它工作的唯一方法是不设置段落样式。

于 2013-08-16T03:13:54.013 回答
2

尝试这个:

[_text drawWithRect:_textRect 选项:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine 属性:属性上下文:nil];

于 2015-11-17T06:58:42.673 回答
0

您可以随意设置一个NSParagraphStylelineBreakMode并使用 . 将其应用于字符串NSParagraphStyleAttributeName。我不知道是否NSLineBreakMode支持所有的值,但我没有理由相信它们不支持。

于 2013-05-30T08:48:15.970 回答