import CoreText import UIKit extension NSAttributedString { func ss_pageRanges(size: CGSize) -> [NSRange] { var ranges: [NSRange] = [] let framesetter = CTFramesetterCreateWithAttributedString(self) let path = CGPath(rect: CGRect(origin: .zero, size: size), transform: nil) var visibleRange = CFRangeMake(0, 0) var location = 0 while visibleRange.location + visibleRange.length < length { let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(location, 0), path, nil) visibleRange = CTFrameGetVisibleStringRange(frame) guard visibleRange.length > 0 else { break } ranges.append(NSRange(location: location, length: visibleRange.length)) location += visibleRange.length } return ranges } } extension UIColor { var ss_cssString: String { var red: CGFloat = 0 var green: CGFloat = 0 var blue: CGFloat = 0 var alpha: CGFloat = 0 getRed(&red, green: &green, blue: &blue, alpha: &alpha) return String(format: "rgba(%d, %d, %d, %.3f)", Int(red * 255), Int(green * 255), Int(blue * 255), alpha) } }