防止NSAttributedString中的换行符

我认为这是一个常见的问题,当你有一组你不想要断线的单词时。

有时这些单词之间的字符是空格或连字符等。在我的情况下,它是一个点:)

这是我的文字50.0 / 80.0

最后,我使用尺寸标签并测量特别是该字符串所需的空间:

UIFont *fontAwardNumber = [UIFont fontWithName:@"DIN-Bold" size:20]; NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init]; CGSize labelSize = (CGSize){customCell.awardValueLabel.bounds.size.width, FLT_MAX}; CGRect rectNeededForAwardNumber = [awardNumber boundingRectWithSize:labelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: fontAwardNumber} context:context]; if (rectNeededForAwardNumber.size.height > customCell.awardValueLabel.bounds.size.height) { //We need to add a breakline NSRange range = [awardNumber rangeOfString:@"/"]; if (range.location != NSNotFound) { awardNumber = [awardNumber stringByReplacingCharactersInRange:range withString:@"/\n"]; } } 

我找到了其他解决方案,例如替换你的空格或连字符以获得牢不可破的字符:

防止部分NSAttributedString中的换行符

但我的问题更为笼统,NSAttributedString是否提供了将一组单词定义为不可破解的内容? 或者,对于一般词汇,有没有更简单的方法呢?

不, NSAttributedString没有任何每个字符属性可以阻止某个范围内的换行。 您可以在NSLineBreakMode ByClipping设置为ByClipping或其他非包装模式,但这适用于段落中的所有文本。 (段落用换行符分隔。)

为了防止在比整个段落更小的范围内断行,您需要在可能发生意外中断的任意两个字符之间插入U + 2060 WORD JOINER 。 在您的示例中,这意味着在斜杠字符的每一侧。