it-swarm-pt.tech

Como verificar se uma fonte está disponível na versão do iOS?

No momento, estou trabalhando em um aplicativo que usa a fonte "ChalkboardSE-Regular" e meu destino de implantação é 4.0+. Esta fonte não estava disponível em 4.1, mas é suportada em 4.3. Qual seria a melhor maneira de verificar se a fonte existe e, caso contrário, use outra fonte compatível nas versões 4.1 do iOS. [UIFont familyName] retorna uma lista dessas fontes "Chalkboard SE"

Desde já, obrigado!

T

49
tg2007

[UIFont familyName] é suportado de volta ao iPhone OS 2.0 (antes de 2.0, aplicativos de terceiros não eram permitidos no iPhone ou iPod touch), então eu usaria isso para verificar se existe uma família de fontes no dispositivo atual e se ele não existe t existe, use uma fonte fall-back adequada para essa versão do iOS. Aqui está a lista de fontes iPhone do John Gruber do iPhone original em 2007 (em contraste com as fontes do Mac OS X do dia). Eu não verifiquei todos eles, mas as fontes iOS que eu verifiquei ainda estão no iOS 5:

Aqui está um exemplo de usar [UIFont familyName]:

NSLog (@"Font families: %@", [UIFont familyNames]);

Isto irá produzir uma lista como esta:

Famílias de fontes: ( Thonburi, "Snell Roundhand", "Academia Gravada LET", ... et cetera.

Depois de saber o nome da família, você pode usar o método de classe UIFontfontNamesForFamilyName para obter um NSArray dos nomes de todas as fontes da família. Por exemplo:

NSLog (@"Courier New family fonts: %@", [UIFont fontNamesForFamilyName:@"Courier New"]);

Isso produzirá uma lista como esta:

Courier Fontes de novas famílias: ( CourierNewPSMT, "CourierNewPS-BoldMT", "CourierNewPS-BoldItalicMT", "CourierNewPS-ItalicMT" )

O código de exemplo a seguir imprime uma lista de cada fonte em cada família no dispositivo atual:

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);
}

Para obter mais informações, consulte o documento Referência de Desenvolvedor do iOS para os métodos de classe UIFontfamilyNames e fontNamesForFamilyName: .

107
Steve HHH

Se você usar o Swift, poderá imprimir todas as fontes (veja abaixo). Você também pode verificar se a fonte existe.

for family in UIFont.familyNames {
    print("\(family)")

    for name in UIFont.fontNames(forFamilyName: family) {
        print("   \(name)")
    }
}
35
Alessandro Pirovano

Esta fonte não estava disponível em 4.1, mas é suportada em 4.3. Qual seria a melhor maneira de verificar se a fonte existe?

Simplesmente peça a fonte da maneira usual usando UIFont* f = [UIFont fontWithName:... size:...];. Se a fonte não estiver disponível, o resultado (f) será nulo.

(Uma forma de garantir a disponibilidade de uma fonte é incluí-la no pacote de aplicativos ...)

14
matt

Swift 3.x

Esqueça os loops, esta é a maneira mais fácil de ver as fontes suportadas pelo iOS.

Basta executar qualquer um dos seguintes itens em um playground.


Apenas nomes de família

Entrada

dump(UIFont.familyNames)

Saída

▿ 75 elements
  - "Copperplate"
  - "Heiti SC"
  - "Kohinoor Telugu"
  ...

Somente nomes de fontes

Entrada

dump(UIFont.familyNames.flatMap { UIFont.fontNames(forFamilyName: $0) })    

Saída

▿ 248 elements
  - "Copperplate-Light"
  - "Copperplate"
  - "Copperplate-Bold"
  ...

Nomes de fontes para o nome da família especificado

Entrada

dump(UIFont.fontNames(forFamilyName: "Helvetica Neue"))

Saída

▿ 14 elements
  - "HelveticaNeue-Italic"
  - "HelveticaNeue-Bold"
  - "HelveticaNeue-UltraLight"
  - "HelveticaNeue-CondensedBlack"
  ...
5
Beau Nouvelle

Versão rápida:

UIFont.familyNames().sort( { $0 < $1 } ).forEach({ print("\($0)"); UIFont.fontNamesForFamilyName("\($0)").sort( { $0 < $1 } ).forEach({ print("     \($0)") }) })
2
eMdOS

Para iOS9/Swift 2.0, nenhuma das opções acima não funcionará, pois a sintaxe mudou um pouco. Eu também prefiro usar extensão (eu escolho criar um para o UIFont, pois ele se encaixa na melhor e modificada resposta @API, já que esse foi o melhor):

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)")
            }
        }
    }
} 

Agora você pode simplesmente ligar:

UIFont.availableFonts()

E ele vai te dizer todas as fontes na forma de 

: Bangla Sangam MN
:    BanglaSangamMN-Bold
:    BanglaSangamMN
: Zapfino
:    Zapfino

Espero que ajude!

2
Jiri Trecak

Isto é o que eu fiz no Objective C para descobrir se a fonte está disponível ou não

NSFont *font = [NSFont fontWithName:@"thefont" size:25.0];
if (font==nil) {
    // thefont is available
} else {
    // thefont is not available
}
2
disaster code

Tente iniciar com o nome dessa fonte e, se for nil, faça outra coisa. Código Swift:

if let font = UIFont(name: name, size: size) { // ok } else { // not ok }

1
superarts.org

Bem, em vez de escrever uma única linha de código, basta abrir o http://iosfonts.com e verificar a disponibilidade com base no suporte da versão do iOS. Você também pode saber como seria.

http://iosfonts.com Preview Feature

0
Sauvik Dolui

Swift 4.x

UIFont.familyNames().sort( { $0 < $1 } ).forEach({ print("\($0)"); UIFont.fontNamesForFamilyName("\($0)").sort( { $0 < $1 } ).forEach({ print("     \($0)") }) })
0
Mercurial

Para objetivo-c

for (NSString *family in UIFont.familyNames) {
    NSLog(@"family %@",family);
    for (NSString *name in [UIFont fontNamesForFamilyName:family]) {
        NSLog(@"      name = %@",name);
    }
}
0
Obadah Shatnawi

Aqui está uma conversão da resposta Steves para o código Swift (para efeitos de cópia e colagem rápida):

    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)
    }
0
Pontus