36 lines
1.3 KiB
Swift
36 lines
1.3 KiB
Swift
|
//
|
||
|
// UIFont.swift
|
||
|
// CoreDataStack
|
||
|
//
|
||
|
// Created by sxiaojian on 2021/1/28.
|
||
|
//
|
||
|
|
||
|
import UIKit
|
||
|
|
||
|
extension UIFont {
|
||
|
|
||
|
// refs: https://stackoverflow.com/questions/26371024/limit-supported-dynamic-type-font-sizes
|
||
|
static func preferredFont(withTextStyle textStyle: UIFont.TextStyle, maxSize: CGFloat) -> UIFont {
|
||
|
// Get the descriptor
|
||
|
let fontDescriptor = UIFontDescriptor.preferredFontDescriptor(withTextStyle: textStyle)
|
||
|
|
||
|
// Return a font with the minimum size
|
||
|
return UIFont(descriptor: fontDescriptor, size: min(fontDescriptor.pointSize, maxSize))
|
||
|
}
|
||
|
|
||
|
public static func preferredMonospacedFont(withTextStyle textStyle: UIFont.TextStyle, compatibleWith traitCollection: UITraitCollection? = nil) -> UIFont {
|
||
|
let fontDescription = UIFontDescriptor.preferredFontDescriptor(withTextStyle: textStyle).addingAttributes([
|
||
|
UIFontDescriptor.AttributeName.featureSettings: [
|
||
|
[
|
||
|
UIFontDescriptor.FeatureKey.featureIdentifier:
|
||
|
kNumberSpacingType,
|
||
|
UIFontDescriptor.FeatureKey.typeIdentifier:
|
||
|
kMonospacedNumbersSelector
|
||
|
]
|
||
|
]
|
||
|
])
|
||
|
return UIFontMetrics(forTextStyle: textStyle).scaledFont(for: UIFont(descriptor: fontDescription, size: 0), compatibleWith: traitCollection)
|
||
|
}
|
||
|
|
||
|
}
|