V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
GaoYu
V2EX  ›  iDev

对 NSAttributedString 进行封装, 使用超方便

  •  
  •   GaoYu · 2017-06-19 11:53:23 +08:00 · 3184 次点击
    这是一个创建于 2744 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每次使用NSAttributedString的时候, 总会写一大堆臃肿的代码, 一般我们会写到Extensioncategory中,对String, NSAttributedString进行扩展, 然后调用起来稍微方便一些..

    或者你也可以这样进行扩展

    extension UILabel {
        convenience init(frame: CGRect = .zero, attributedText: String, textColor: UIColor, font: UIFont, lineSpacing: CGFloat) {
            self.init(frame: frame)
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.lineSpacing = lineSpacing
            paragraphStyle.lineBreakMode = .byTruncatingTail
            let attrStr = NSAttributedString(string: attributedText, attributes: [NSParagraphStyleAttributeName: paragraphStyle,
                                                                                  NSFontAttributeName: font,
                                                                                  NSForegroundColorAttributeName: textColor])
            self.attributedText = attrStr
        }
    }
    

    这里我对NSAttributedString的所有属性都进行了简单的封装, 让开发者使用起来超方便

    项目地址 如果你喜欢的话, 欢迎 star

    使用方法如下:

    // 1. shadow: you can set range, default allRange
    label1.attributedText = content.toAttributed.shadow {
        $0.shadowColor = UIColor.red
        $0.shadowOffset = CGSize(width: 3, height: 3)
        $0.shadowBlurRadius = 2.0
    }.rawValue
    
    
    // 2. paragraphStyle: you can set range, default allRange
    label2.attributedText = content.toAttributed.paragraph {
        $0.alignment = .center
        $0.lineSpacing = 8.0
    }.rawValue
    
    
    // 3. underLine:  you can set range, default allRange
    label3.attributedText = content.toAttributed.underLine(style: [.styleDouble, .patternDot], color: UIColor.red).rawValue
    
    // 4. font, foregroundColor
    textField.attributedPlaceholder = "Please enter the phone number".toAttributed.font(.systemFont(ofSize: 15))
                                                                     .foregroundColor(.red).rawValue
    
    // 5. Even you can do it
    label6.attributedText = content.toAttributed
                .underLine(style: [.styleSingle, .patternDot], color: .red, range: NSMakeRange(0, 5))
                .font(.systemFont(ofSize: 18), range: NSMakeRange(5, 5))
                .backgroundColor(.blue, range: NSMakeRange(10, 5))
                .foregroundColor(.purple, range: NSMakeRange(15, 5))
                .baselineOffset(value: 5, range: NSMakeRange(20, 5))
                .obliqueness(angle: 0.5, range: NSMakeRange(25, 5))
                .kern(padding: 0.3, range: NSMakeRange(30, 5))
                .expansion(value: 0.3, range: NSMakeRange(35, 5))
                .stroke(color: .green, width: 3, range: NSMakeRange(40, 5))
                .textEffect(range: NSMakeRange(50, 5))
                .shadow{
                    $0.shadowColor = UIColor.red
                    $0.shadowOffset = CGSize(width: 3, height: 3)
                    $0.shadowBlurRadius = 2.0
                }.rawValue
    
    
    wgziOS
        1
    wgziOS  
       2017-06-20 10:51:27 +08:00
    很厉害的样子,还在学 swift,看不懂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3470 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:47 · PVG 18:47 · LAX 02:47 · JFK 05:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.