2012-01-28 12 views
12

Sto provando ad aggiungere un font personalizzato al mio progetto in Xcode 4.2, ma ogni volta che provo ad usarlo, ottengo un errore che l'oggetto è nullo.UIFont con font personalizzato fallisce con Nil

Ho fatto quanto segue:
1) Aggiunto di fila per il mio .plist 'font forniti da applicazione' valore: "LCDMono2 Ultra.ttf"
2) Aggiunto il carattere al mio file di supporto e ha mostrato in XCode per verificare che sia stato aggiunto.
3) verificata utilizzando Ottieni informazioni che il nome completo è "LCDMono2 Ultra"
4) ha creato il tipo di carattere nel mio progetto con:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16]; 

e ho provato questa variante:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16.f]; 

5) Si è tentato di utilizzare il nome del font (addObject:myFont.fontName), generando l'errore 'nil'.

Che cosa potrebbe causare l'errore? Potrebbe essere qualcosa come lo spazio nel nome?

+3

Utilizzare '[UIFont familyNames]' per vedere se il proprio font viene effettivamente "visto" dal sistema operativo. Ciò minimizzerà almeno le cose. Ho avuto alcuni tipi di file di font che iOS non riconoscerebbe. – smparkes

+0

@smparkes - L'ho appena fatto prima di leggere la tua risposta! E sicuramente, Xcode rimuove automaticamente lo spazio, e il nome appare come "LCDMono2Ultra" e funziona. Non è sempre così? Grazie. – wayneh

+1

Probabilmente non Xcode. Questo è probabilmente il modo in cui il nome del font è codificato nel file di font. Un piccolo suggerimento gratuito: iOS ti consente solo di caricare due volti da una famiglia, quindi se stai utilizzando più di due volti da una famiglia, dovrai cambiare il nome della famiglia su ogni faccia per renderla unica. Ci è voluto un po 'per rintracciare ... – smparkes

risposta

12

Lo spazio nel nome completo del tipo di carattere è stato rimosso automaticamente dopo aver aggiunto alla progetto. Ho controllato il file di font originale e lo spazio è lì, quindi Apple non deve voler occuparsi degli spazi. Ho cambiato il riferimento a "LCDMono2Ultra" e funziona.

+4

Non è un "non voglio occuparsi di spazi", credo che stia usando il nome PostScript del font. –

+4

David Dunham ha ragione. In generale, se hai intenzione di codificare effettivamente il nome di un font nel tuo codice, devi sempre usare il nome completo di PostScript per fare riferimento al carattere. (È il nome PostScript stesso che non consente spazi). Se non sei sicuro di cosa sia, installa il font sul tuo Mac con Font Book, quindi in Font Book, scegli "Anteprima> Mostra informazioni font" per visualizzare i vari nomi, incluso il nome PostScript. Il nome PostScript di "LCDMono2 Ultra" è 'LCDMono2Ultra'. – NSGod

+0

Sì, hai ragione. Non ho installato il carattere sul mio sistema, quindi non ho potuto ottenere quelle informazioni dal libro dei font. Una volta installato, posso vedere il nome Postscript. Grazie. – wayneh

2

Hai inserito un punto di interruzione e controllato che stai ricevendo un oggetto UIFont valido per myFont. Vale la pena controllare perché molto probabilmente il problema è che "LCDMono2 Ultra" è in realtà il nome della famiglia di font e ciò che si desidera utilizzare è qualcosa come "LCDMono2 Ultra-normal" o "LCDMono2 Ultra-bold". Apri il tuo .ttf con Libro Font e vedi quali informazioni ti dà.

In alternativa, se non è possibile trovare qualsiasi cosa in Libro Font si potrebbe provare a chiamare:

NSArray *fonts = [UIFont fontNamesForFamilyName:"LCDMono2 Ultra"]; 

E poi basta stampare i font matrice nel debugger per controllare quello che dovrebbe essere.

Spero che questo aiuto, fatemi sapere se questo non funziona e cercherò di pensare a qualcos'altro :)

+0

Grazie, ma ho trovato la soluzione - vedi il mio commento sopra. – wayneh

8

Ho avuto questo stesso identico problema per alcune ore e ho provato tutto quanto sopra e nessuno funzionava, il font veniva aggiunto ovunque avrebbe dovuto essere e ho anche provato i font che funzionavano in altre app, ma non sembravano mai essere aggiunto a questa app.

Sembra che qualcosa sia cambiato in Xcode 5 il carattere doveva essere aggiunto nelle proprietà di destinazione sotto la scheda informazioni per farlo funzionare mentre prima dovevano essere aggiunti in "appName-info.plist" vedi immagine sotto:

Spero che questo aiuti qualcun altro.

enter image description here

+0

Importante: aggiungi l'intero nome file, con estensione. –

0

Trova il tuo carattere (forse con un altro nome) e utilizzare questo nome.

for (NSString *familyName in [UIFont familyNames]) { 
     for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) { 
      NSLog(@"%@", fontName); 
     } 
    } 
0

Il mio file font è "Futura Heavy.ttf", quindi io uso - sostituito lo spazio come di seguito quindi funziona!

class func futuraHeavy() -> UIFont { 
     return UIFont(name: "Futura-Heavy", size: 12)! 
    } 
Problemi correlati