我要求显示带有两种不同样式(不同颜色,文本部分粗体)的文本的UILabel。使用attributedText属性可以很容易地解决这个问题。
我的问题是文字可能会或可能不会超过我的标签所能容纳的内容。使用纯文本时,一切都按我想要的方式工作。文本是自动换行以适合标签中的行数,如果/当文本比标签中显示的长时,则尾部被截断。
当我切换到使用attributedText时,我只能在尾部截断和自动换行之间进行选择。如果我希望尾部被截断,那么标签只会呈现带有截尾的单行(即使它可以适合10行)。如果我选择自动换行,那么尾部不会被截断,但是不能显示标签中的线条。
我的内容字符串不包含任何换行符,只是一个长字符串。
答案 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
的所有值,但我没有理由相信它们不是。