Add NSUnderlineStyle.PatternDash to NSAttributedString in Swift?

前端 未结 4 696
佛祖请我去吃肉
佛祖请我去吃肉 2021-02-12 14:46

I\'m trying to add an underline to some text in my Swift app. This is the code I have currently:

let text = NSMutableAttributedString(string: self.currentHome.na         


        
相关标签:
4条回答
  • 2021-02-12 15:32

    Turns out I needed the toRaw() method - this works:

    text.addAttribute(NSUnderlineStyleAttributeName, value: NSNumber(integer:(NSUnderlineStyle.StyleDouble).toRaw()), range: NSMakeRange(0, text.length))
    
    0 讨论(0)
  • 2021-02-12 15:35

    If you want an actual dashed line, you should OR | the raw values of both PatternDash and StyleSingle enums like below:

    let dashed     =  NSUnderlineStyle.PatternDash.rawValue | NSUnderlineStyle.StyleSingle.rawValue
    
    let attribs    = [NSUnderlineStyleAttributeName : dashed, NSUnderlineColorAttributeName : UIColor.whiteColor()];
    
    let attrString =  NSAttributedString(string: plainText, attributes: attribs)
    
    0 讨论(0)
  • 2021-02-12 15:37

    In Xcode 6.1, SDK iOS 8.1 toRaw() has been replaced by rawValue:

     text.addAttribute(NSUnderlineStyleAttributeName, value:  NSUnderlineStyle.StyleDouble.rawValue, range: NSMakeRange(0, text.length))
    

    Or Easier :

     var text : NSAttributedString = NSMutableAttributedString(string: str, attributes : [NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]) 
    
    0 讨论(0)
  • 2021-02-12 15:43

    Here's a full example of creating a UILabel with underlined text:

    Swift 5:

    let homeLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
    
    let text = NSMutableAttributedString(string: "hello, world!")
    
    let attrs = [NSAttributedString.Key.underlineStyle: NSUnderlineStyle.patternDash.rawValue | NSUnderlineStyle.single.rawValue]
    
    text.addAttributes(attrs, range: NSRange(location: 0, length: text.length))
    
    homeLabel.attributedText = text
    

    Swift 4:

    let homeLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
    
    let text = NSMutableAttributedString(string: "hello, world!")
    
    let attrs = [NSAttributedStringKey.underlineStyle: NSUnderlineStyle.patternDash.rawValue | NSUnderlineStyle.styleSingle.rawValue]
    
    text.addAttributes(attrs, range: NSRange(location: 0, length: text.length))
    
    homeLabel.attributedText = text
    

    Swift 2:

    Swift allows you to pass an Int to a method that takes an NSNumber, so you can make this a little cleaner by removing the conversion to NSNumber:

    text.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleDouble.rawValue, range: NSMakeRange(0, text.length))
    

    Note: This answer previously used toRaw() as used in the original question, but that is now incorrect as toRaw() has been replaced by the property rawValue as of Xcode 6.1.

    0 讨论(0)
提交回复
热议问题