更新: iOS 7 を実行している実際の iPhone 5 でこの問題が発生しました。詳細については近日中にお知らせします。
NSAttributedString が表示されない iOS 7 シミュレーターのバグを発見したと思います。他の誰かがこれをテストしてバグであることを確認できれば素晴らしいと思います。その後、Apple にバグを報告します。
問題は、NSAttributedString に NSUnderlineStyleAttributeName と NSParagraphStyleAttributeName を使用する組み合わせにあるようです。
再現する手順は次のとおりです。
1) Xcode 5 で、新しい「Single View Application」を作成します。何とでも呼んでください。
2) ViewController.m で、viewDidLoad メソッドを次のように置き換えます。
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableParagraphStyle* paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.alignment = NSTextAlignmentCenter;
NSAttributedString* attrStr = [[NSAttributedString alloc] initWithString:@"Lorem ipsum dolor sit" attributes:
@{NSUnderlineStyleAttributeName:@1,
NSParagraphStyleAttributeName:paragraph}];
UILabel* myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 0, 0)];
myLabel.backgroundColor = [UIColor greenColor];
myLabel.attributedText = attrStr;
[myLabel sizeToFit];
[self.view addSubview:myLabel];
}
3) iOS 7 デバイスで実行してから、iOS 7 シミュレーターで再度実行します。
4) 最後に、デプロイ ターゲットを iOS 6 に設定し、iOS 6 シミュレーターで実行します。
結果は次のようになります
- iOS 7 デバイス: 正しく表示されます
- iOS 7 シミュレーター: ラベルの背景のみを表示する
- iOS 6 シミュレーター: 正しく表示される
スクリーンショット:
iOS7 デバイス
iOS7 シミュレーター