我刚刚尝试过这样的事情(我的真实代码的简化版本):
NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"Testfoobarhey"];
UIFont *font = [UIFont fontWithName:@"Georgia-Bold" size:12.0];
[text addAttribute:NSFontAttributeName value:font range:NSMakeRange(4, 3)];
[text addAttribute:NSFontAttributeName value:font range:NSMakeRange(7, 3)];
换句话说,我添加了两个相邻的粗体属性。然后我查看了结果:
NSLog(@"%@", text);
输出显示了三个文本块:普通字体的“Test”、粗体的“foobar”和普通字体的“hey”。
所以回答你的问题,是的,看起来两个相邻的格式范围是在 NSMutableAttributedString 中自动加入的。
PS 在相关说明中,我注意到,如果我应用一个范围跨越换行符的属性,则生成的 NSAttributedString 将在换行符之前和之后有一个属性,并且换行符本身不会有任何属性。因此,如果您一次解析一个字符,您可能需要对此进行补偿。