IOS 13システムフォントとは何ですか?
IOS 13以前は、SFUIDisplayフォントを使用していました。
UIFont(name: ".SFUIDisplay-Light", size: UIFont.systemFontSize)
しかし、iOS 13では機能しません。
このバグはとてもBSです。これを回避する唯一の方法は、systemFont(ofSize:weight:)
メソッドを直接使用することです。別名、メソッドUIFont(name:size:)
を使用してシステムフォントを取得することはできません。おかしな理由でTimes New Romanを取得するだけです。 Apple開発者は私たちを混乱させている必要があります。そのため、上記の元の質問については、以下を使用する必要があります:
UIFont(systemFont:UIFont.systemFontSize, weight: .light)
私の状況では、このバグに遭遇し、UIFont
を拡張して、同じフォントを異なるサイズで返すようにしました。これは、カスタムフォントとシステムフォントで機能する必要があります。 xcode 11 ios 13で機能するためには、fontName
に ".SF"が含まれているかどうかを確認するための愚かなチェックを追加する必要がありました。
extension UIFont {
func forSize(_ pointSize: CGFloat) -> UIFont {
if !fontName.contains(".SF"), let font = UIFont(name: fontName, size: pointSize) {
return font
}
return UIFont.systemFont(ofSize: pointSize, weight: weight)
}
}
font-family: ".SFCompactText-Regular"; font-weight:通常;フォントスタイル:通常
「San Francisco(SF)ProおよびCompact」フォントです。ここで確認できます https://developer.Apple.com/fonts/
systemFont(ofSize: CGFloat) -> UIFont
を使用してフォントを作成します。
次に、そのフォントのfontName
とfamilyName
を取得します。
上記を印刷すると、現在のiOSに対する答えが得られます。 iOS 13で実行してください。
システムフォントを使用することを目的としている場合、その名前を実際に心配する必要はありません。システムに任せてください。
_let font = UIFont.systemFont(ofSize: UIFont.systemFontSize)
_
この時点で、システムフォントが変更されるたびに、自動的に更新されます。
さらに
カスタムフォントをたくさん使っています。私はそれをする必要があります
実際には、システムフォントを使用する場合は、フォント名を指定せずに実行できます。たとえば、次のように適切なフォントを返す関数を実装できます。
_func getFont(name: String = "", size: CGFloat = UIFont.systemFontSize) -> UIFont {
// system font
let defaultFont = UIFont.systemFont(ofSize: UIFont.systemFontSize)
if name.isEmpty {
return defaultFont
}
return UIFont(name: name, size: size) ?? defaultFont
}
_
システムフォントを使用するには、getFont()
と呼び出します。それ以外の場合は、フォント名getFont(name: ".SFUIDisplay-Light")
を言及して呼び出します。
ただし、次のような方法でシステムフォント名を取得し、それを使用することもできます。
_let systemFontName = UIFont.systemFont(ofSize: UIFont.systemFontSize).fontName
getFont(name: systemFontName)
_
_UIFont.systemFont
_はシステムフォント名を言及せずに自動的に検出するので、無意味だと思います。