7

我有一个没有 NSStrikethroughStyleAttributeName 属性的可变属性字符串,如下所示:

NSMutableAttributedString *str1 = [[NSMutableAttributedString alloc] initWithString:@"aaaa" attributes:@{NSStrikethroughStyleAttributeName:[NSNumber numberWithInteger:NSUnderlineStyleSingle]}];

和另一个具有 NSStrikethroughStyleAttributeName 属性的可变属性字符串,如下所示:

NSMutableAttributedString *str2 = [[NSMutableAttributedString alloc] initWithString:@"bbbb"];

以及包含上面两个字符串的整个字符串:

NSMutableAttributedString *labelString = [[NSMutableAttributedString alloc] init];
[labelString appendAttributedString:str1];
[labelString appendAttributedString:str2];

当我将整个字符串附加到 UILabel 时:

_label.attributedText = labelString;

它在 iOS7 和 iOS8 中都显示良好,如下所示:

啊啊啊bbbb

但是当我交换他们的位置时:

[labelString appendAttributedString:str2];
[labelString appendAttributedString:str1];

它在 iOS7 中正确显示,但在 iOS8 中显示不正确

ios7: bbbb啊啊啊 ios8: bbbbaaaa

似乎在 iOS8 中,如果属性字符串中的第一个字符没有删除线,则 UILabel 无法正确呈现删除线。我认为这是iOS8中的一个错误,有没有人和我遇到同样问题的人?

4

6 回答 6

10
NSMutableAttributedString *str2 = [[NSMutableAttributedString alloc] initWithString:@"bbbb" attributes:@{NSStrikethroughStyleAttributeName:[NSNumber numberWithInteger:NSUnderlineStyleNone]}];

它应该有帮助

于 2014-09-22T15:04:50.467 回答
8

iOS8.1.1 上,我们在设置NSMutableAttributedString时遇到了更多问题,例如NSStrikethroughStyleAttributeName

如果你的属性没有改变,试试这个,它会的。

我从 UILabel 开始推理,它是改变属性的精神,所以如果我们假设 NSStrikethroughStyleAttributeName 没有初始化标签文本,那么我们将需要初始化它。

我所做的是通过无 NSStrikethroughStyleAttributeName 初始化 mutableAttributedString 并将此属性更改为突出显示:结果是:

 

NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString: myString attributes: @ {NSStrikethroughStyleAttributeName: @ (NSUnderlineStyleNone)}];
             [string addAttributes: @ {NSStrikethroughStyleAttributeName: @ (NSUnderlineStyleSingle)} range: [myString rangeOfString: mySubString]];
[MyLabel setAttributedText: string];

有效结果 <= iOS8.1.1

于 2014-11-24T13:38:34.547 回答
3

修复iOS8中的错误:用清晰的颜色删除字符串的第一个字母,然后删除你想要的范围内的文本。

于 2014-09-25T11:49:04.830 回答
1

当您没有从 0 开始索引时,请尝试以下操作:

NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:@"Hello"];
[attributedStr addAttributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)} range:NSMakeRange(1, str.length)];
[attributedStr addAttributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleNone)} range:NSMakeRange(0, 1)];
于 2015-05-28T02:29:45.840 回答
1

当你添加时NSStrikethroughStyleAttributeName,你也应该添加NSBaselineOffsetAttributeName,它被设置为 0。在 swift 中,你应该使用NSUnderlineStyle 的 rawValue。

在此处输入图像描述

于 2017-06-22T09:03:46.290 回答
0

我看到了同样的问题,将 NSStrikethroughStyleAttributeName 的值更改为 NSUnderlineStyleNone 并不能解决它。当然看起来像 iOS 8 错误。

于 2014-09-24T00:33:42.547 回答