2015-03-25 19 views
7

Ho letto in giro per soluzioni diverse ma nulla sembra funzionare. Questo codice crea un'eccezione nullo:Swift NSAttributoString font personalizzati

[NSFontAttributeName: UIFont(name: "Raleway-SemiBold", size: 16)!] 

ho i font installati correttamente e mostrano correttamente in app (target è impostato).
Ho provato ad aggiungere i caratteri forniti dall'applicazione nello plist ma non è successo nulla. Non riesco a modificare gli elementi nell'array: (they are item0 : string : Raleway-SemiBold.tff).

Quindi in pratica sono bloccato ... A volte gli ambienti Swift e Apple sono ottimi per un programmatore, altre volte (il più delle volte), sono talmente difettosi e hanno bisogno di così tanti soluzioni per raggiungere i risultati previsti.

Molte grazie in anticipo per qualsiasi aiuto.

+2

Avete verificato che 'UIFont (nome:" Raleway-SemiBold ", dimensione: 16)' non è 'nil'? - No offesa significava, ma dubito che Apple o Swift sia il colpevole :) –

+0

Senza offesa, non incolpo di Apple o Swift, avevo bisogno di fare un sacco di soluzioni alternative per questo progetto e questo era solo il momento in cui dovevo lasciar perdere tutto :)Beh, immagino che siano nulli, perché il compilatore dice che inaspettatamente ha trovato nulla mentre scartava. Ma i caratteri sono inclusi nell'app e funzionano nell'interfaccia e così via. –

+0

Un errore comune è specificare il nome del carattere errato in 'UIFont (nome: ...)' - non è il nome del file. Ma ci devono essere dozzine di domande e risposte con le istruzioni esatte ... –

risposta

14

Stai ricevendo un'eccezione perché UIFont(name: "Raleway-SemiBold", size: 16) restituisce nil e lo stai decomprimendo con !.

Al contrario, utilizzare Scartare condizionale:

if let font = UIFont(name: "Raleway-SemiBold", size: 16) { 
    let attributes = [NSFontAttributeName: font] 
    // do something with attributes 
} else { 
    // The font "Raleway-SemiBold" is not found 
} 

È possibile utilizzare familyNames() e fontNamesForFamilyName(_:) metodi UIFont s' per ottenere la stringa esatta richiesta.

Swift 4

if let font = UIFont(name: "Raleway-SemiBold", size: 16) { 
    let attributes = [NSAttributedStringKey.font: font] 
    // do something with attributes 
} else { 
    // The font "Raleway-SemiBold" is not found 
} 
+0

Quindi dovrei scorrere i caratteri e vedere qual'è il nome? I font sono installati e funzionano su altre parti dell'app. –

+0

Sicuro! Se non vedi i nomi dei font che ti aspetti, [vedi questa risposta] (http://stackoverflow.com/a/10255264/1445366) per la risoluzione dei problemi. –

0

Non vi resta che scrivere il nome stringa corretta del vostro carattere.

  1. Non scrivere il nome che è il nome del file di font. (come bodoni-mt-bold.ttf è il nome del file che ho scaricato da qualsiasi sito).

  2. Per trovare il nome del carattere esatto, seguire l'immagine in basso.

  3. Vai alla tua etichetta selezionalo e vai al carattere personalizzato e poi vedi il nome del tuo carattere personalizzato nella sua famiglia. se il nome del tuo font personalizzato è presente, copia quel nome e incollalo come stringa dove vuoi usarlo. (Nota non è possibile copiare il testo nome del font si deve scrivere il resto dove poi passato)

enter image description here

2

Per Swift 3, ecco un aggiornamento che ha funzionato per me:

Per prima cosa impostare il tipo di carattere e quindi creare un textAttribute con la NSFontAttributeName:

let font = UIFont(name: "Raleway-SemiBold", size: 16) 
textAttribute = [NSFontAttributeName: font as Any, NSForegroundColorAttributeName: UIColor.black] 

È quindi possibile applicare textAttribute alla propria etichetta, campo di testo ecc.

Problemi correlati