// // NSAttributedString.swift // VDS // // Created by Matt Bruce on 5/30/23. // import Foundation import UIKit extension NSAttributedString { public static func spacer(for width: CGFloat) -> NSAttributedString { let spacerImage = UIImage() let spacerAttachment = NSTextAttachment() spacerAttachment.bounds = .init(x: 0, y: 0, width: width, height: 1) spacerAttachment.image = spacerImage return NSAttributedString(attachment: spacerAttachment) } } extension NSMutableAttributedString { public static var useScaledLineHeight: Bool = false public static func mutableText(for text: String, textStyle: TextStyle, useScaledFont: Bool = true, textColor: UIColor, alignment: NSTextAlignment = .left, lineBreakMode: NSLineBreakMode) -> NSMutableAttributedString { //var for if you can scale or not let scaledMode = useScaledFont && TextStyle.canScaleFonts //create the paragraph for specific properties let paragraph = NSMutableParagraphStyle() paragraph.alignment = alignment paragraph.lineBreakMode = lineBreakMode var defaultFont = textStyle.font var lineHeight = textStyle.lineHeight if scaledMode { defaultFont = defaultFont.scaledFont if useScaledLineHeight { lineHeight = textStyle.scaledLineHeight } } //set lineHeight if textStyle.lineHeight > 0.0 { paragraph.minimumLineHeight = lineHeight paragraph.maximumLineHeight = lineHeight } //create the attributeArray var attributes: [NSAttributedString.Key : Any] = [.font: defaultFont, .foregroundColor: textColor, .paragraphStyle: paragraph] //set letterSpacing if textStyle.letterSpacing > 0.0 { attributes[.kern] = textStyle.letterSpacing } return NSMutableAttributedString(string: text, attributes: attributes) } }