为什么删除线在 iOS 14 中不起作用

Why strikethrough is not working in iOS 14

我有一个 UILabel 显示删除线的文本(例如 text)。它在 iOS 13 之前工作正常。在 iOS 14 中,删除线没有显示,即不是 'text',而是 'text'。这是我使用的代码:

let totalString: String = "some text"
let strikeString: String = "text" //string to be made strikethrough
let totalNsString = totalString as NSString
let attributeString =  NSMutableAttributedString(string: totalString)
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: totalNsString.range(of: strikeString))
label.attributedText = attributeString

期望的输出:

some text

当前输出:

some text

任何人都可以告诉我有什么我需要改变的或其他什么吗? TIA.

无法重现。我复制了你的代码 没有任何改变 和 运行 它,这是我在模拟器中看到的:

这是我希望看到的,也是你声称你想看到的。因此,如果您没有看到它,那是由于其他原因造成的。也许 label 不是您认为的 UILabel。也许其他代码正在出现并更改文本。但不管是什么原因,都与提出的问题无关

(为了实践和易读性,最好说NSUnderlineStyle.thick.rawValue而不是2。但这与这里的问题无关。)

将值为 0 的 baselineOffset 添加到属性字符串会恢复删除线。可以在 apple dev forum and .

上找到更多详细信息
attributeString.addAttribute(NSAttributedString.Key.baselineOffset, value: 0, range: totalNsString.range(of: strikeString))

解决方法是使用strikethroughStyle,同时设置strikethroughColor:

let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text, attributes: [:])
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle,
                                     value: NSUnderlineStyle.single.rawValue,
                                     range: NSRange(location: 0, length: attributeString.length))
attributeString.addAttribute(NSAttributedString.Key.strikethroughColor,
                                     value: UIColor.black,
                                     range: NSRange(location: 0, length: attributeString.length))