【发布时间】:2013-10-08 07:12:11
【问题描述】:
上周我问了一个关于 NSAttributedString 没有显示的模拟器错误的问题:iOS 7 Simulator Bug - NSAttributedString does not appear
不幸的是,现在看来这不是模拟器错误,而是 iOS 7 错误。我现在已经在 iPhone 5 设备上重现了这个问题。
该错误似乎是使用 NSUnderlineStyleAttributeName 和 NSParagraphStyleAttributeName 作为 NSAttributedString 的属性的组合。
到目前为止,我只在两台 iOS 7 设备上进行了测试,问题只出现在其中一台上。即使它们都升级到完全相同的版本:
第一个带有 iOS 7.0 (11A465) 的 iPhone 5:文本不显示
升级到 7.0.2 (11A501) 后的第一部 iPhone 5:文本不出现
运行 iOS 7.0 (11A4449d) 的第二代 iPhone 5:文本显示正确
升级到 7.0.2 (11A501) 后的第二部 iPhone 5:文本不出现
因此,Apple 似乎在 iOS 7.0 (11A4449d) 之后引入了此错误。我已经向他们提交了一个错误,并将在收到任何回复时更新您。
重现错误的步骤
如果您运行的是 iOS 7.0.2,那么您应该能够重现此错误。
在您的设备上下载并运行此项目https://github.com/rohinnz/iOS-7-BUG---NSAttributedString-does-not-appear
或
1) 在 Xcode 5 中创建一个新的“单一视图应用程序”。随便叫什么。
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:@(NSUnderlineStyleSingle),
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 版本,文本将显示或不显示。 UILabel 的背景颜色在这两种情况下都会显示。
截图
装有 iOS 7.0 (11A465) 的 iPhone 5
装有 iOS 7.0 (11A4449d) 的 iPhone 5
我的问题
有人可以在设备上重现此问题吗?
【问题讨论】:
-
您可能想要创建一个说明错误的最小项目,将其托管在 github 上或其他地方,并通过 developer.apple.com/bug-reporting 打开错误,指向错误报告中的 github 项目。
-
好主意,我很快就会上传一些东西到 github。我已经向 Apple 提交了一个错误,但我不希望他们很快回复,因为他们还没有回复我不久前向他们提出的另一个 iOS 7 错误。
-
我通过在属性文本上使用背景色并在旋转设备时调整 uilabel 的大小发现了类似的结果。如果我不使用背景色,一切都可以正常工作。更改宽度后使用背景颜色,文本消失。在旋转回原来的文本再次出现。
-
UILabel只是马车。NSTextAttachments也会导致文本行消失,但与标签的高度成反比。看到这个问题:stackoverflow.com/q/19253224/1580288 -
我认为我的第二个解决方法是让标签调整自己的高度,这是解决此问题的完全可靠的解决方案。
标签: ios7 xcode5 nsattributedstring