Верьте или нет приписываемые строки умеют рисовать себя, поэтому вы можете просто написать:
extension UIImage {
class func imageWithLabel(label: UILabel) -> UIImage {
return UIGraphicsImageRenderer(bounds: label.bounds).image { _ in
label.attributedText?.draw(in: label.bounds)
}
}
}
, но так как вам даже не нужна метка, вы можете просто сделать:
extension NSAttributedString {
func image(size: CGSize) -> UIImage {
return UIGraphicsImageRenderer(size: size).image { _ in
self.draw(at: .zero)
}
}
}
См. Документы Apple на розыгрыш
Вот игровая площадка:
import UIKit
import PlaygroundSupport
import UIKit
import PlaygroundSupport
extension NSMutableAttributedString {
func title(_ text: String, color: UIColor) {
let attr = [NSAttributedString.Key.foregroundColor: color]
let str = NSMutableAttributedString(string: text, attributes: attr)
append(str)
}
}
extension NSAttributedString {
func image(size: CGSize) -> UIImage {
return UIGraphicsImageRenderer(size: size).image { _ in
self.draw(at: .zero)
}
}
}
let segmentedControl = UISegmentedControl.init(frame: .init(origin: .zero, size: .init(width: 160, height: 20)))
let formattedString = NSMutableAttributedString()
formattedString.title("Hello, world", color: .red)
let image = formattedString.image(size: .init(width: 60, height: 20))
segmentedControl.insertSegment(with: image.withRenderingMode(.alwaysOriginal), at: 0, animated: false)
segmentedControl.insertSegment(withTitle: "test", at: 1, animated: false)
segmentedControl.backgroundColor = .white
PlaygroundPage.current.liveView = segmentedControl