使用 Swift 在 iOS 11 中为 NSAttributedString 添加删除线
Posted
技术标签:
【中文标题】使用 Swift 在 iOS 11 中为 NSAttributedString 添加删除线【英文标题】:Adding strikethrough to NSAttributedString in iOS 11 with Swift 【发布时间】:2018-08-31 06:12:43 【问题描述】:在使用删除线时遇到一些问题。目前我正在做以下事情:
theString.addAttributes([
NSAttributedStringKey.strikethroughStyle: NSUnderlineStyle.styleSingle.rawValue,
NSAttributedStringKey.strikethroughColor: UIColor.white
], range: NSMakeRange(0, 1))
虽然它没有显示任何类型的删除线。有任何想法吗?我似乎找不到任何有效的方法。
【问题讨论】:
您的代码对我有用。尽管鉴于您拥有的范围,只有第一个字母会被删除。尝试不同的颜色。如果背景为白色,您可能看不到白色删除线。 Ummmm hmmmmmm 为什么我的标签上看不到-_- 显示更多相关代码。我在没有标签的操场上测试。 没有其他相关的东西,使用几乎相同的代码为文本添加下划线效果很好。删除线可能仅适用于文本视图而不适用于标签吗? 刚刚在操场上使用了一个标签。还在为我工作。也许是字体问题或颜色问题。这就是为什么您需要提供更多详细信息。 【参考方案1】:我用它来删除 Xcode9/ios11/Swift4 环境中的文本
let strokeEffect: [NSAttributedStringKey : Any] = [
NSAttributedStringKey.strikethroughStyle: NSUnderlineStyle.styleSingle.rawValue,
NSAttributedStringKey.strikethroughColor: UIColor.red,
]
let strokeString = NSAttributedString(string: "text", attributes: strokeEffect)
【讨论】:
【参考方案2】:斯威夫特 4.1
attributedText.addAttributes([
NSAttributedStringKey.strikethroughStyle:NSUnderlineStyle.styleSingle.rawValue, NSAttributedStringKey.strikethroughColor:UIColor.black],
range: NSMakeRange(0, attributedText.length))
【讨论】:
【参考方案3】:Swift 5.1
let attributedText : NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributedText.addAttributes([
NSAttributedString.Key.strikethroughStyle: NSUnderlineStyle.single.rawValue,
NSAttributedString.Key.strikethroughColor: UIColor.lightGray,
NSAttributedString.Key.font : UIFont.systemFont(ofSize: 12.0)
], range: NSMakeRange(0, attributedText.length))
【讨论】:
【参考方案4】:试试这个
func strikethrough(_ text:String) -> NSAttributedString
//strikethrough
let range = (self as NSString).range(of: text)
let attributedString = NSMutableAttributedString(string:self)
attributedString.addAttribute(NSAttributedString.Key.strikethroughColor, value: UIColor.gray, range: range)
attributedString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: range)
return attributedString
label.attributedText = "Hello world".strikethrough("world")
【讨论】:
不要使用像“2”这样的硬编码常量。像其他答案一样使用实际的库常量。【参考方案5】:斯威夫特 4.2
let mutPricesString : NSMutableAttributedString = NSMutableAttributedString()
var attrPrice_1 : NSAttributedString = NSAttributedString()
var attrPrice_2 : NSAttributedString = NSAttributedString()
attrPrice_1 = NSAttributedString(string: "14000 KD", attributes:
[NSAttributedString.Key.strikethroughStyle: NSUnderlineStyle.single.rawValue,
NSAttributedString.Key.foregroundColor: UIColor.lightGray,
NSAttributedString.Key.font: ARFont.Regular(fontSize: 15)])
attrPrice_2 = NSAttributedString(string: " 12460 KD", attributes:
[NSAttributedString.Key.foregroundColor: UIColor.black,
NSAttributedString.Key.font: ARFont.Semibold(fontSize: 17)])
mutPricesString.append(attrPrice_1)
mutPricesString.append(attrPrice_2)
lbl.attributedText = mutPricesString
回答:
【讨论】:
【参考方案6】:我正在分享最新的更新。 Swift4、iOS 11.3
attributedText.addAttributes([
NSStrikethroughStyleAttributeName:
NSUnderlineStyle.styleSingle.rawValue,
NSStrikethroughColorAttributeName:
UIColor.black], range: textRange)
【讨论】:
以上是关于使用 Swift 在 iOS 11 中为 NSAttributedString 添加删除线的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中为工作周(周一至周五)设置 UNCalendarNotificationTrigger?