使用 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?

在Swift中为iOS设计填字游戏网格

在 iOS8/Swift 中为 UIDatePicker 设置文本颜色和字体

在 Swift 中为 iOS 设计一个填字游戏网格

如何在 Swift 中为 iOS 创建 SDK?

在 Swift 问题中为 iOS 应用程序解析 JSON