为什么删除线在 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))
我有一个 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))