現在、「ChalkboardSE-Regular」フォントを使用するアプリで作業しており、展開ターゲットは4.0以降です。このフォントは4.1では使用できませんでしたが、4.3ではサポートされています。フォントが存在するかどうかを確認し、存在しない場合は、<4.1バージョンのiOSでサポートされている別のフォントを使用することをお勧めします。 [UIFont familyName]は、これらのフォント「Chalkboard SE」のリストを返します
前もって感謝します!
T
[UIFont familyName]
はiPhone OS 2.0にサポートされます(2.0以前は、サードパーティのアプリはiPhoneまたはiPod touchで許可されていませんでした)。これを使用して、現在のデバイスにフォントファミリが存在するかどうかを確認し、存在しない場合は、そのバージョンのiOSに適した代替フォントを使用します。以下は、2007年のオリジナルのiPhoneのJohn GruberのiPhoneフォントのリストです(当時のMac OS Xのフォントとは対照的です)。すべてをチェックしたわけではありませんが、チェックしたiOSフォントはまだiOS 5にあります。
[UIFont familyName]
の使用例を次に示します。
NSLog (@"Font families: %@", [UIFont familyNames]);
これにより、次のようなリストが生成されます。
フォントファミリ:(トンブリ、「スネルラウンドハンド」、「アカデミーエングレーデッドLET」、...など.
ファミリ名がわかったら、UIFont
クラスメソッドfontNamesForFamilyName
を使用して、ファミリ内のすべてのフォントの名前のNSArrayを取得できます。例えば:
NSLog (@"Courier New family fonts: %@", [UIFont fontNamesForFamilyName:@"Courier New"]);
これにより、次のようなリストが生成されます。
Courier Newファミリーフォント:(CourierNewPSMT、 "CourierNewPS-BoldMT"、 "CourierNewPS-BoldItalicMT"、 "CourierNewPS-ItalicMT")
次の例のコードは、現在のデバイスのすべてのファミリの各フォントのリストを印刷します。
NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++)
{
NSString *fontFamily = [fontFamilies objectAtIndex:i];
NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
NSLog (@"%@: %@", fontFamily, fontNames);
}
詳細については、UIFont
クラスメソッド familyNames および fontNamesForFamilyName: のiOSデベロッパーリファレンスドキュメントをご覧ください。
Swift=を使用すると、すべてのフォントを印刷できます(以下を参照)。フォントが存在するかどうかも確認できます。
for family in UIFont.familyNames {
print("\(family)")
for name in UIFont.fontNames(forFamilyName: family) {
print(" \(name)")
}
}
このフォントは4.1では使用できませんでしたが、4.3ではサポートされています。フォントが存在するかどうかを確認する最善の方法は何ですか
UIFont* f = [UIFont fontWithName:... size:...];
を使用して、通常の方法でフォントを要求するだけです。フォントが利用できない場合、結果(f
)はnilになります。
(フォントの可用性を保証する1つの方法は、アプリバンドルに含めることです...)
これらのforループを忘れて、これはiOSでサポートされているフォントを見る最も簡単な方法です。
次のいずれかをプレイグラウンドで実行するだけです。
入力
dump(UIFont.familyNames)
出力
▿ 75 elements
- "Copperplate"
- "Heiti SC"
- "Kohinoor Telugu"
...
入力
dump(UIFont.familyNames.flatMap { UIFont.fontNames(forFamilyName: $0) })
出力
▿ 248 elements
- "Copperplate-Light"
- "Copperplate"
- "Copperplate-Bold"
...
入力
dump(UIFont.fontNames(forFamilyName: "Helvetica Neue"))
出力
▿ 14 elements
- "HelveticaNeue-Italic"
- "HelveticaNeue-Bold"
- "HelveticaNeue-UltraLight"
- "HelveticaNeue-CondensedBlack"
...
Swiftバージョン:
UIFont.familyNames().sort( { $0 < $1 } ).forEach({ print("\($0)"); UIFont.fontNamesForFamilyName("\($0)").sort( { $0 < $1 } ).forEach({ print(" \($0)") }) })
IOS9の場合、Swift 2.0、上記のいずれも構文が少し変更されるため機能しません。また、個人的に拡張機能を使用することを好みます(UIFontに最適なものを作成することを選択します@APIの回答を修正し、これが最良の回答であったため)
extension UIFont {
static func availableFonts() {
// Get all fonts families
for family in UIFont.familyNames() {
NSLog("\(family)")
// Show all fonts for any given family
for name in UIFont.fontNamesForFamilyName(family) {
NSLog(" \(name)")
}
}
}
}
今、あなたはただ電話することができます:
UIFont.availableFonts()
そして、すべてのフォントを次の形式で表示します。
: Bangla Sangam MN
: BanglaSangamMN-Bold
: BanglaSangamMN
: Zapfino
: Zapfino
それが役に立てば幸い!
これは、フォントが使用可能かどうかを調べるためにObjective Cで行ったことです。
NSFont *font = [NSFont fontWithName:@"thefont" size:25.0];
if (font==nil) {
// thefont is available
} else {
// thefont is not available
}
Swift 4.x
UIFont.familyNames().sort( { $0 < $1 } ).forEach({ print("\($0)"); UIFont.fontNamesForFamilyName("\($0)").sort( { $0 < $1 } ).forEach({ print(" \($0)") }) })
そのフォント名で初期化してみて、nil
の場合は別のことをしてください。 Swift code:
if let font = UIFont(name: name, size: size) { // ok } else { // not ok }
スティーブスの回答をSwiftコード(クイックコピーアンドペースト用))に変換したものを次に示します。
var fontFamilies = UIFont.familyNames()
for (var i:Int = 0; i < fontFamilies.count; i++) {
var fontFamily: NSString = fontFamilies[i] as NSString
var fontNames: NSArray = UIFont.fontNamesForFamilyName(fontFamilies[i] as String) as NSArray
NSLog ("%@: %@", fontFamily, fontNames)
}
さて、1行のコードを記述するのではなく、 http://iosfonts.com を開いて、iOSバージョンのサポートに基づいて可用性を確認するだけです。また、どのように見えるかを知ることもできます。
objective-cの場合
for (NSString *family in UIFont.familyNames) {
NSLog(@"family %@",family);
for (NSString *name in [UIFont fontNamesForFamilyName:family]) {
NSLog(@" name = %@",name);
}
}