UILabel归属文本与多个换行符模式

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

我的问题是,文本可能会或可能不会超过我可以在我的标签中适合的时间。 当使用纯文本时,一切都按照我想要的方式工作。 文本是单词包装,以适应标签中的行数,如果文本比标签中显示的长度更长,尾部会被截断。

当我切换到使用的时候,我只能selecttail截尾和换行。 如果我想要尾巴截断标签只呈现一个截断尾巴(即使它可以适应10行)单行。 如果我select单词换行,那么尾部不会被截断,但不能放在标签中的行将不会被显示。

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

当我设置线条间距时,我错过了截断,但是我只需要将linebreakmode添加到paragraphstyle

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; 

他们只有这样才能使这个工作是不设置段落风格。

尝试这个:

[_text drawWithRect:_textRect options: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine属性:attributes context:nil];

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