详情
解决方案
extension UIFont {
class func systemFont(ofSize fontSize: CGFloat, symbolicTraits: UIFontDescriptor.SymbolicTraits) -> UIFont? {
return UIFont.systemFont(ofSize: fontSize).including(symbolicTraits: symbolicTraits)
}
func including(symbolicTraits: UIFontDescriptor.SymbolicTraits) -> UIFont? {
var _symbolicTraits = self.fontDescriptor.symbolicTraits
_symbolicTraits.update(with: symbolicTraits)
return withOnly(symbolicTraits: _symbolicTraits)
}
func excluding(symbolicTraits: UIFontDescriptor.SymbolicTraits) -> UIFont? {
var _symbolicTraits = self.fontDescriptor.symbolicTraits
_symbolicTraits.remove(symbolicTraits)
return withOnly(symbolicTraits: _symbolicTraits)
}
func withOnly(symbolicTraits: UIFontDescriptor.SymbolicTraits) -> UIFont? {
guard let fontDescriptor = fontDescriptor.withSymbolicTraits(symbolicTraits) else { return nil }
return .init(descriptor: fontDescriptor, size: pointSize)
}
}
用法
font = UIFont.italicSystemFont(ofSize: 15).including(symbolicTraits: .traitBold)
font = UIFont.systemFont(ofSize: 15, symbolicTraits: [.traitBold, .traitItalic])
font = font.excluding(symbolicTraits: [.traitBold]
font = font.withOnly(symbolicTraits: [])
完整样本
不要忘记在此处粘贴解决方案代码。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
addLabel(origin: .init(x: 20, y: 20), font: .systemFont(ofSize: 15, symbolicTraits: [.traitBold, .traitItalic]))
addLabel(origin: .init(x: 20, y: 40), font: UIFont.italicSystemFont(ofSize: 15).including(symbolicTraits: .traitBold))
guard let font = UIFont.systemFont(ofSize: 15, symbolicTraits: [.traitBold, .traitItalic]) else { return }
addLabel(origin: .init(x: 20, y: 60), font: font.excluding(symbolicTraits: [.traitBold]))
addLabel(origin: .init(x: 20, y: 80), font: font.withOnly(symbolicTraits: []))
}
private func addLabel(origin: CGPoint, font: UIFont?) {
guard let font = font else { return }
let label = UILabel(frame: .init(origin: origin, size: .init(width: 200, height: 40)))
label.attributedText = NSAttributedString(string: "Hello World!", attributes: [.font: font, .foregroundColor: UIColor.black ])
view.addSubview(label)
}
}
结果