2012-01-26 10 views
36

Sto riscontrando un problema con UIFonts personalizzati. Ne carico 6 (font A in regular/bold/regularItalic/boldItalic, font B in varianti condensated/condensedSlanted).Linea di base personalizzata UIFont spostata

Tuttavia, qui è quello che dà se fusi: enter image description here

Le due prime file sono OK, ma l'ultima presenta un problema di base.

Ho provato a modificare UPM, ascender, discender, x-height del font in FontLab in modo che corrisponda ai valori del primo font (che vengono visualizzati correttamente), ma senza alcun risultato. Ho provato a convertire il formato del font da OTF a TTF, senza fortuna. Qualunque cosa provi, rende sempre in questo modo.

Qualcuno ha esperienza con questo?

+0

Ehi, hai una soluzione per questo. Ho provato molte cose ma non ho trovato una soluzione adeguata. Anche questo problema riguarda alcuni caratteri specifici, ma non tutti. – Mrunal

+0

Commento sui miei progressi fino ad ora: ho trovato un altro file .otf per lo stesso font; questa volta funziona perfettamente. Lunedì mattina studierò le differenze tra i due tipi di carattere, in particolare la parte "Metriche dei caratteri" in FontLab, e riferirò ciò che troverò. – Cyrille

+3

Lo stesso numero: http://stackoverflow.com/questions/7535498/uibutton-custom-font-vertical-alignment, http: // stackoverflow.it/questions/5414730/custom-installed-font-not-displayed-correct-in-uilabel –

risposta

29

Here o anche here è possibile trovare le soluzioni per voi. Si tratta di baseline.

Nota C'è un problema con l'installazione di Apple Fonts Utility su El Capitan. Vedere https://apple.stackexchange.com/questions/211138/apple-font-tools-cannot-install-in-macbook-pro-el-capitan per una soluzione alternativa.

Per modificare questi caratteri nel carattere è necessario scaricare la Suite di strumenti Apple Font . Una volta installato, è necessario aprire Terminal e accedere alla directory che contiene il font. Dopo di che entrano il seguente comando:

  1. ftxdumperfuser -t hhea -A d font.ttf Questo creerà un file chiamato font.hhea.xml, apri questo nuovo file in un editor di testo e regola i valori per ascender e discender. Generalmente, se il font si trova troppo in basso a , si desidera ridurre l'ascender e aumentare la discesa. Dopo modifica e il salvataggio immettere il seguente comando nel terminale per ricostruire il file di font:

  2. ftxdumperfuser -t hhea -A f font.ttf È ora possibile utilizzare il file font.ttf nell'applicazione. Se il carattere non è ancora a posto basta ripetere lo la procedura sopra indicata finché non sei soddisfatto.

O è possibile modificare facilmente NSBaselineAttributeName come segue:

NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:@"a string" 
           attributes:@{ NSBaselineOffsetAttributeName : @-13 }]; 
+0

Come promesso circa un anno fa (vedi i commenti alla mia domanda), ecco i punti per te! – Cyrille

+0

Penso che NSBaselineOffsetAttributeName fosse deprecato in ios6. https://developer.apple.com/LIBRARY/ios/releasenotes/General/RN-iOSSDK-6_0/index.html A causa di problemi di compatibilità, l'attributo NSBaselineOffsetAttributeName non è più supportato in iOS 6. Sono avendo questo problema con costruito in Helvetica-Neue = [Impossibile risolverlo. –

+0

@SeanDunford 'UIKIT_EXTERN NSString * const NSBaselineOffsetAttributeName NS_AVAILABLE_IOS (7_0); // NSNumero contenente il valore in virgola mobile, in punti; offset dalla baseline, il default 0' fondamentalmente NSBaselineOffsetAttributeName è costante specifica per iOS 7.x –

2

Ciao ho anche affrontato tale problema in quel momento ho impostato Titolo Contenuto bordo conseguenza per UIButton.

Quindi, se si sta utilizzando questo font per UIButton allora sicuramente è possibile utilizzare questo.

enter image description here

Spero che questo vi aiuterà fuori.

+3

Questo è OK per UIButtons, ma per quanto riguarda gli altri controlli? Cosa succede se domani il mio cliente vuole un altro font? – Cyrille

+0

Basta provare con una UILabel con allineamento al centro. Immagino che affronterai questo problema solo per gli UIButtons non altrove. – Mrunal

+1

Lo screenshot allegato alla mia domanda mostra chiaramente che non sto affrontando il problema solo con UIButtons, ma anche con UITextFields, e in effetti per i controlli * all *. Il problema è inerente alle metriche del carattere stesso, non al rendering di un particolare controllo in UIKit. – Cyrille

0

È necessario controllare questi caratteri uno accanto all'altro in alcuni software vettoriali come Adobe Illustrator o CorelDraw. Se si trova anche il rendering dei font nella stessa base di moda sfalsata in questi software, allora ha qualcosa a che fare con il font stesso. cioè i caratteri potrebbero essere creati con tali pixel sfalsati all'interno del file di font. Quindi, non è necessario apportare tali modifiche nei parametri .xib per qualsiasi UIButton o UITextField ecc.

Se possibile, condividere i file dei font qui.

+0

Questo è quello che farò in FontLab, poiché ho trovato un altro .otf dello stesso font che non presenta il problema di base. – Cyrille

0

forse dare un'occhiata alla proprietà UITextView/UITextLabel 'thLabel.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;'

definisce l'allineamento verticale. È stato utile per me qualche giorno fa in un caso simile

+0

Questa è una buona soluzione, ma non è una vera soluzione universale. Ad esempio, non risolve il problema di allineamento per UIBarButtonItems. – Cyrille

+0

'UITextView' non eredita da' UIControl', e 'UITextLabel' non esiste in Cocoa Touch per quanto ne so. Forse stai pensando a 'UITextField', che eredita da' UIControl' e quindi ha la proprietà 'contentVerticalAlignment' che descrivi. –

0

A proposito di Apple Font Tool Suite non è l'unico programma che può aiutare. Quindi se non vuoi installare la copia virtuale di macO, puoi usare FontForge per Windows per giocare con ascender e discender: element -> informazioni sui font, quindi sulla scheda OS/2 e poi sulle metriche. E non dimenticare di spuntare la casella "Apple" quando generi font al termine. In bocca al lupo!

2

Un'altra soluzione interessante che ho trovato deriva dal seguente post: http://www.andyyardley.com/2012/04/24/custom-ios-fonts-and-how-to-fix-the-vertical-position-problem/

Quindi si dovrebbe verificare se questo è il caso con il vostro carattere, come dice lì in uno dei commenti:

La mia soluzione in realtà corregge il carattere personalizzato per funzionare con il motore di rendering di iOS permettendoti di usarlo come sostituto diretto dei caratteri standard senza alcuna modifica.

E come lo fa?

Fondamentalmente egli suggerisce la modifica delle metriche del tipo di carattere utilizzando uno strumento di Apple esterno (vedi fonte di riferimento metriche https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html#//apple_ref/doc/uid/TP40009542-CH4-SW66)

Per modificare questi nel font è necessario scaricare il font Tool Suite di Apple. Una volta installato, devi aprire Terminal e navigare nella directory che contiene il tuo font. Dopo di che inserire il seguente comando:

ftxdumperfuser -t hhea -A d font.ttf 

Questo creerà un file chiamato font.hhea.xml, aprire questo nuovo file in un editor di testo e regolare i valori per ascendente e discendente. Generalmente, se il font si trova troppo in basso, si vuole diminuire l'ascender e aumentare il discender. Dopo la modifica e il salvataggio immettere il seguente comando nel terminale per ricostruire il file di font:

ftxdumperfuser -t hhea -A f font.ttf 

È ora possibile utilizzare il file font.ttf nell'applicazione. Se il carattere non è corretto, ripetere la procedura sopra finché non si è soddisfatti.

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. – honk

Problemi correlati