NSAttributedStringをいじっているときに、UITextViewの奇妙な動作に遭遇しました。2つのプロパティがあるとします。
@property (weak, nonatomic) IBOutlet UILabel *label;
@property (weak, nonatomic) IBOutlet UITextView *textView;
これらのプロパティの所有コントローラーには、次のコードがあります。
NSDictionary *attributes = @{NSFontAttributeName : [UIFont systemFontOfSize:20.],
NSForegroundColorAttributeName: [UIColor redColor]};
NSAttributedString *as = [[NSAttributedString alloc] initWithString:@"Hello there!" attributes:attributes];
NSMutableAttributedString *mas = [[NSMutableAttributedString alloc] initWithString:@"Hello where?" attributes:nil];
[mas addAttribute:NSForegroundColorAttributeName value:[UIColor yellowColor] range:NSMakeRange(3, 5)];
self.label.attributedText = as;
self.label.attributedText = mas;
self.textView.attributedText = as;
self.textView.attributedText = mas;
シミュレーターで実行すると、システムのデフォルトフォントを使用して、ラベルは次のようになります(つまり、想像力を働かせてください)。
<black>Hel</black><yellow>lo wh</yellow><black>ere?</black>
サイズ20.0のシステムフォントを使用したテキストビューは次のようになります。
<red>Hel</red><yellow>lo wh</yellow><red>ere?</red>
テキストビューが2つの属性付き文字列の属性を組み合わせているようです。これは驚くべき結果であり、ラベルのように動作することを期待していました。
これはバグだと思います。そうでない場合、UITextViewはattributedTextをUILabelとは異なる方法で処理するのはなぜですか。
(XCodeバージョン4.5.1)