防止部分NSAttributedString中的换行符

我正在使用一个UILabel ,它具有大的主要文本,然后是较小的文本,告诉你谁说的:

截图显示问题

现在它基本上是一个NSAttributedString ,在小文本上有一个字体属性。

我想设置的东西,所以大文本包装,但小文本没有。 也就是说,如果文本将与正确的项目相同,则它应该按原样呈现,但是它会像在左侧项目中那样进行包装,整个小文本应该出现在下一行:

截图显示正确的行为

我试图达到的HTML等价物是:

 Title <nobr>Subtitle</nobr> - or - Title <span style="white-space:nowrap">Subtitle</span> 

我试过用NSHTMLTextDocumentType将这两个转换为NSHTMLTextDocumentType ,它似乎没有做一个直接的翻译。

按照rmaddy的build议,我能够通过replace空格和破折号来获得我想要的效果:

Objective-C的:

 NS_INLINE NSString *NOBR(NSString *string) { return [[string stringByReplacingOccurrencesOfString:@" " withString:@"\u00a0"] stringByReplacingOccurrencesOfString:@"-" withString:@"\u2011"]; } NSAttributedString *username = [[NSAttributedString alloc] initWithString:NOBR(hotQuestion.username) attributes:nil]; ... 

Swift(注意略有不同的转义码格式):

 func nobr(_ string:String) -> String { return string .stringByReplacingOccurrencesOfString(" ", withString: "\u{a0}") .stringByReplacingOccurrencesOfString("-", withString: "\u{2011}") } let username = NSAttributedString(string:nobr(hotQuestion.username, attributes:nil)) 

在Unicode中还有字符连接符\ u2060字符,它将防止任何一方的换行并且不可见。 我使用它来强制文字包装,当度符号是单词的一部分,所以整个单词将保持在同一行,在iOS中。

Objective-C的:

 text = [text stringByReplacingOccurrencesOfString:@"°" withString:@"\u2060°\u2060"];