iOS
Caratteri personalizzati
Ricerca…
Incorporamento di caratteri personalizzati
Supporto font personalizzato
Le applicazioni che desiderano utilizzare caratteri personalizzati possono ora includere quei tipi di carattere nel loro pacchetto di applicazioni e registrare tali caratteri con il sistema includendo la chiave UIAppFonts nel loro file Info.plist. Il valore di questa chiave è una serie di stringhe che identificano i file di caratteri nel pacchetto dell'applicazione. Quando il sistema vede la chiave, carica i caratteri specificati e li rende disponibili per l'applicazione.
Una volta che i font sono stati impostati in Info.plist
, puoi usare i tuoi font personalizzati come qualsiasi altro font in IB o programmaticamente.
- Trascina e rilascia il tuo font nella cartella Xcode Supporting Files. Non dimenticare di contrassegnare la tua app nella sezione "Aggiungi agli obiettivi". Da questo momento puoi usare questo font in IB e sceglierlo dal pallet dei font.
- Per rendere questo carattere disponibile sul dispositivo, apri
Info.plist
e aggiungiFonts provided by application key
(UIAppFonts). Aggiungi il nome del font come valore alla chiave Item 0. Nota: il nome del carattere può variare dal nome del file del font.
- Ottieni il nome del carattere personalizzato aggiunto utilizzando lo snippet sottostante
[ Swift 3 ]
for family in UIFont.familyNames {
print("\(family)")
for name in UIFont.fontNames(forFamilyName: family) {
print(" \(name)")
}
}
[ Obiettivo - C ]
for (NSString *familyName in [UIFont familyNames]){
NSLog(@"Family name: %@", familyName);
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@"--Font name: %@", fontName);
}
}
Caratteri personalizzati con Storyboard
I caratteri personalizzati per i componenti dell'interfaccia utente dallo storyboard possono essere facilmente raggiunti con attributi definiti dall'utente in storyboard e categorie .
I vantaggi sono come,
- Non è necessario definire punti vendita per l'elemento ui
- Non è necessario impostare il font per gli elementi in modo programmatico.
Passi da seguire
File Font: aggiungi il file Font (.ttf) al pacchetto di applicazioni e aggiungi la voce per il font in Info.plist sotto Font fornito dall'applicazione come in questa documentazione di caratteri personalizzati.
Definisci categorie: aggiungi un file come UIKit + IBExtensions e aggiungi le categorie per gli elementi dell'interfaccia utente come UILabel, UIButton ecc. Per i quali desideri impostare il carattere personalizzato. Tutte le categorie avranno una proprietà personalizzata come fontName . Questo verrà utilizzato dallo storyboard in seguito per l'impostazione del carattere personalizzato (come nel passaggio 4).
UIKit + IBExtensions.h
#import <UIKit/UIKit.h>
//Category extension for UILabel
@interface UILabel (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// Category extension for UITextField
@interface UITextField (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// Category extension for UIButton
@interface UIButton (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
- Getter e setter: Definisci getter e setter per la proprietà fontName verso ogni categoria aggiunta.
UIKit + IBExtensions.m
#import "UIKit+IBExtensions.h"
@implementation UILabel (IBExtensions)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
@implementation UITextField (IBExtensions)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
@implementation UIButton (IBExtensions)
- (NSString *)fontName {
return self.titleLabel.font.fontName;
}
- (void)setFontName:(NSString *)fontName{
self.titleLabel.font = [UIFont fontWithName:fontName size:self.titleLabel.font.pointSize];
}
@end
- Impostazione del carattere nello storyboard: aggiungere una voce in Attributi di runtime definiti dall'utente con fontName come keyPath e il nome del carattere personalizzato come valore con il tipo String come mostrato.
Questo imposterà il tuo font personalizzato durante l'esecuzione dell'app.
Gli appunti:
- Lato-Regular è il carattere personalizzato che ho usato.
- Lo stesso nome nel file .ttf aggiunto in bundle dovrebbe essere usato senza estensione nello storyboard.
- La dimensione del carattere sarà uguale a quella definita nell'ispettore degli attributi dell'elemento dell'interfaccia utente.
Applicazione di caratteri personalizzati ai controlli all'interno di uno storyboard
L'esempio seguente mostra come applicare caratteri personalizzati a una barra di navigazione e include correzioni per alcuni comportamenti bizzarri trovati in Xcode. Uno può anche applicare i caratteri personalizzati a qualsiasi altro UIControls come UILabels , UIButtons e altro utilizzando la finestra di ispezione attributi dopo che il carattere personalizzato è stato aggiunto al progetto. Si prega di notare i collegamenti esterni a campioni di lavoro e video nella parte inferiore.
- Seleziona la barra di navigazione all'interno del tuo controller di navigazione
- Cambia il carattere del titolo nell'Inspector degli attributi
(Probabilmente dovrai cambiare la Tinta della barra per la barra di navigazione prima che Xcode prenda il nuovo carattere)
Note (caveat)
Verificato che questo funziona su Xcode 7.1.1+. ( Vedi gli esempi sotto )
- È necessario attivare la tinta della barra di navigazione prima che il font abbia effetto (sembra un bug in Xcode, puoi reimpostarlo su default e il font si bloccherà)
- Se scegli un font di sistema ~ Assicurati che la dimensione non sia 0.0 (altrimenti il nuovo font sarà ignorato)
- Sembra che questo funzioni senza problemi quando solo una NavBar si trova nella gerarchia della vista. Sembra che i NavBars secondari nello stesso stack siano ignorati. (Si noti che se si visualizza la barra di navigazione del controller di navigazione principale tutte le altre impostazioni personalizzate di navBar vengono ignorate).
Gotchas (deux)
Alcuni di questi vengono ripetuti, il che significa che è molto probabile che ne valga la pena.
- A volte lo xml dello storyboard si corrompe. Ciò richiede che rivedi la struttura nello Storyboard come modalità Codice sorgente (fai clic con il pulsante destro del mouse sul file storyboard> Apri come ...)
- In alcuni casi, il tag navigationItem associato all'attributo runtime definito dall'utente è stato impostato come figlio xml del tag view anziché del tag controller vista. In tal caso, rimuoverlo tra i tag per il corretto funzionamento.
- Attiva / disattiva la tinta della barra laterale per garantire che venga utilizzato il carattere personalizzato.
- Verificare il parametro di dimensione del carattere a meno che non si utilizzi uno stile di carattere dinamico
- La gerarchia della vista sovrascriverà le impostazioni. Sembra che sia possibile un font per stack.
Risultato
Campioni
- Video che mostra più font nel progetto avanzato
- Download semplice sorgente
- Download di progetti avanzati ~ Mostra più font NavBar e una soluzione personalizzata per i font
- Video che mostra più font e caratteri personalizzati
Gestione di caratteri personalizzati
Nota ~ Una buona lista di controllo può essere trovata dal sito Web di Code With Chris e puoi vedere il progetto di download di esempio.
Se hai il tuo font e vuoi usarlo nello storyboard, allora c'è una serie decente di risposte sulla seguente SO Question . Una risposta identifica questi passaggi.
- Ottieni file di font personalizzati (.ttf, .ttc)
- Importa i file dei font sul tuo progetto Xcode
- Nell'app-info.plist, aggiungi una chiave denominata Fonts fornita dall'applicazione. È un tipo di array, aggiungi tutti i nomi dei file dei font all'array, nota: inclusa l'estensione del file.
- Nello storyboard, sulla barra di navigazione, vai a Impostazioni attributi, fai clic sul pulsante icona destra dell'area di selezione Carattere. Nel pannello popup, scegli Carattere su Personalizzato e scegli il nome di carattere Famiglia incorporata.
Soluzione per i caratteri personalizzati
Quindi Xcode sembra naturalmente in grado di gestire i caratteri personalizzati su UINavigationItem ma questa funzione non si aggiorna correttamente (il font selezionato viene ignorato).
Per risolvere questo problema:
Un modo è quello di correggere usando lo storyboard e aggiungendo una riga di codice: prima aggiungi un UIView (UIButton, UILabel o qualche altra sottoclasse UIView) al View Controller (non l'elemento di navigazione ... Xcode non sta attualmente permettendo di farlo quello). Dopo aver aggiunto il controllo, puoi modificare il carattere nello storyboard e aggiungere un riferimento come uscita al View Controller. Assegna semplicemente quella vista a UINavigationItem.titleView. È anche possibile impostare il nome del testo nel codice, se necessario. Segnalato bug (23600285).
@IBOutlet var customFontTitleView: UIButton!
//Sometime later...
self.navigationItem.titleView = customFontTitleView
Nota - Questo esempio è derivato da una risposta che ho postato su SO ( qui ).