Fonts 可以在Interface Builder中使用SF舍入吗
我只是想再次确认我没有遗漏任何明显的东西:Fonts 可以在Interface Builder中使用SF舍入吗,fonts,interface-builder,xcode11,Fonts,Interface Builder,Xcode11,我只是想再次确认我没有遗漏任何明显的东西: 是否可以在接口构建器中使用旧金山的新的圆形变量?< /P> < P>我目前的练习是: import UIKit @IBDesignable class SFRoundedLabel: UILabel { required init?(coder: NSCoder) { super.init(coder: coder) setupFont() } override func prepare
是否可以在接口构建器中使用旧金山的新的圆形变量?< /P> < P>我目前的练习是:
import UIKit
@IBDesignable
class SFRoundedLabel: UILabel {
required init?(coder: NSCoder) {
super.init(coder: coder)
setupFont()
}
override func prepareForInterfaceBuilder() {
setupFont()
}
func setupFont() {
self.font = self.font.asSFRounded()
}
}
//https://stackoverflow.com/a/53818276/1343140
extension UIFont {
var weight: UIFont.Weight {
guard let weightNumber = traits[.weight] as? NSNumber else { return .regular }
let weightRawValue = CGFloat(weightNumber.doubleValue)
let weight = UIFont.Weight(rawValue: weightRawValue)
return weight
}
private var traits: [UIFontDescriptor.TraitKey: Any] {
return fontDescriptor.object(forKey: .traits) as? [UIFontDescriptor.TraitKey: Any]
?? [:]
}
func asSFRounded() -> UIFont {
if #available(iOS 13.0, *) {
let fontSize = self.pointSize
let systemFont = UIFont.systemFont(ofSize: fontSize, weight: self.weight)
let font: UIFont
if let descriptor = systemFont.fontDescriptor.withDesign(.rounded) {
font = UIFont(descriptor: descriptor, size: fontSize)
} else {
font = systemFont
}
return font
} else {
return self
}
}
}
extension NSMutableAttributedString {
func setFontFace(font: UIFont, color: UIColor? = nil) {
beginEditing()
self.enumerateAttribute(
.font,
in: NSRange(location: 0, length: self.length)
) { (value, range, stop) in
if let f = value as? UIFont,
let newFontDescriptor = f.fontDescriptor
.withFamily(font.familyName)
.withSymbolicTraits(f.fontDescriptor.symbolicTraits) {
let newFont = UIFont(
descriptor: newFontDescriptor,
size: font.pointSize
)
removeAttribute(.font, range: range)
addAttribute(.font, value: newFont, range: range)
if let color = color {
removeAttribute(
.foregroundColor,
range: range
)
addAttribute(
.foregroundColor,
value: color,
range: range
)
}
}
}
endEditing()
}
}