防止部分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"];