NSStrikethroughStyleAttributeName ,如何删除 iOS 10.3 中的字符串?

NSStrikethroughStyleAttributeName , How to strike out the string in iOS 10.3?

我在 iOS 10.3 发布之前使用了这行代码,并且工作正常。

NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n%@",strMRP,strOffer]];

[attributeString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:12] range:NSMakeRange(0, strMRP.length)];

[attributeString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:15] range:NSMakeRange(strMRP.length, strOffer.length+1)];

[attributeString addAttribute:NSStrikethroughStyleAttributeName
                        value:[NSNumber numberWithInteger: NSUnderlineStyleDouble]
                        range:NSMakeRange(0,strMRP.length)];

但是现在它停止工作了,有没有其他方法可以删除?

它是 iOS10.3 中的错误,NSStrikethroughStyleAttributeName(任何 NSUnderlineStyle 情况) 在 iOS SDK 10.3 上不再工作。

if anyone found the updated answer related to this , please inform here, I will update my answer.

产品版本:10.3

创建时间:2017 年 3 月 14 日

发起时间:2017 年 3 月 14 日

打开雷达Link:http://www.openradar.appspot.com/31034683

雷达状态当前为开启状态

你也可以看到替代样本可能有用。

如上所述,这是一个 iOS 10.3 错误。

我们需要立即解决方法,以防万一有人在寻找提示: 我们的标签通过 NSMutableAttributedStringNSMutableParagraphStyle 设置了属性。当不使用/使用 "empty" 段落样式(没有设置任何属性的实例)时,该错误不会发生。

所以在这种情况下,省略段落样式并解决当时缺少的段落属性为我们解决了这个问题。

配合使用效果很好
   NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n%@",strMRP,strOffer]];

[attributeString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:12] range:NSMakeRange(0, strMRP.length)];

[attributeString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:15] range:NSMakeRange(strMRP.length, strOffer.length+1)];

[attributeString addAttribute:NSBaselineOffsetAttributeName
                        value:[NSNumber numberWithInteger: NSUnderlineStyleNone]
                        range:NSMakeRange(0,strMRP.length)];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
                        value:[NSNumber numberWithInteger: NSUnderlineStyleDouble]
                        range:NSMakeRange(0,strMRP.length)];

我在 developer forum 上找到了一种适合我的解决方法。添加 NSBaselineOffsetAttributeName 到字符串属性解决了这个问题:)

iOS 10.3 以后需要添加 NSBaselineOffsetAttributeName。

NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n%@",strMRP,strOffer]];
[attributeString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:12] range:NSMakeRange(0, strMRP.length)];
[attributeString addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:15] range:NSMakeRange(strMRP.length, strOffer.length+1)];
[attributeString addAttribute:NSBaselineOffsetAttributeName
                    value:[NSNumber numberWithInteger: NSUnderlineStyleNone]
                    range:NSMakeRange(0,strMRP.length)];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
                    value:[NSNumber numberWithInteger: NSUnderlineStyleDouble]
                    range:NSMakeRange(0,strMRP.length)];

添加 NSBaselineOffsetAttributeName 后,它适用于单线、双线等。

只需使用这个:-

NSMutableAttributedString *costPrice = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"₹ %@",strDetails]]; [costPrice addAttribute:NSBaselineOffsetAttributeName value:[NSNumber numberWithInteger: NSUnderlineStyleSingle] range:NSMakeRange(0,costPrice.length)];

这是临时解决方案。希望它有效

***您可以将其传递给函数并享受它!!!

func customString(currentprice:String,oldPrice:String) -> NSMutableAttributedString{
        // 1
        let NewString = currentprice + "  " + oldPrice

        let string = NewString as NSString
        let attributedString = NSMutableAttributedString(string: string as String)

        // 2
        let firstAttributes = [NSForegroundColorAttributeName: UIColor(red: 238/255, green: 140/255, blue: 84/255, alpha: 1),NSBaselineOffsetAttributeName:1]
        let secondAttributes = [NSForegroundColorAttributeName: UIColor.lightGrayColor(), NSStrikethroughStyleAttributeName: 1]

        // 3
        attributedString.addAttributes(firstAttributes, range: string.rangeOfString(currentprice))
        attributedString.addAttributes(secondAttributes, range: string.rangeOfString(oldPrice))

        return attributedString
    }

并像这样使用:

YourUILabel.attributedText   = customString("300", oldPrice: "400")