防止NSAttributedString

时间:2016-02-18 18:39:41

标签: ios 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"];
    }
}

我找到了其他解决方案,例如用空格或连字符代替牢不可破的字符:

Preventing line breaks in part of an NSAttributedString

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

1 个答案:

答案 0 :(得分:6)

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

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