UILabel使用多个换行模式赋予了Text

时间:2013-05-30 08:21:29

标签: ios objective-c uilabel nsattributedstring

我要求显示带有两种不同样式(不同颜色,文本部分粗体)的文本的UILabel。使用attributedText属性可以很容易地解决这个问题。

我的问题是文字可能会或可能不会超过我的标签所能容纳的内容。使用纯文本时,一切都按我想要的方式工作。文本是自动换行以适合标签中的行数,如果/当文本比标签中显示的长时,则尾部被截断。

当我切换到使用attributedText时,我只能在尾部截断和自动换行之间进行选择。如果我希望尾部被截断,那么标签只会呈现带有截尾的单行(即使它可以适合10行)。如果我选择自动换行,那么尾部不会被截断,但是不能显示标签中的线条。

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

4 个答案:

答案 0 :(得分:8)

当我设置行间距时,我错过了截断,但我只需将linebreakmode添加到段落样式

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;

答案 1 :(得分:4)

他们唯一能让这个工作的方法就是不设置段落样式。

答案 2 :(得分:1)

试试这个:

[_ text drawWithRect:_textRect                  选项: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine               属性:属性                  上下文:无];

答案 3 :(得分:0)

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