2011-10-19 18 views
7

Utilizzo dell'SDK iOS 5 Sto scrivendo un'app che utilizza un carattere di stile di script personalizzato nell'istanza UINavigationBar. Il problema con questo tipo di carattere è che, poiché è nello stile di script, i suoi glifi superano i limiti. Si può vedere il problema in-app qui:Etichetta di titolo cut-off in UINavigationBar in iOS 5

Example image on a device

Per un esempio più chiaro, potete vedere il mio documento di Photoshop qui:

Photoshop example

Qualsiasi idea di come potrei risolvere questo problema? Il mio primo istinto è stato quello di impostare la proprietà ClipToBounds di UILabel in UINavigationBar, ma apparentemente non esiste un modo approvato da Apple per accedere direttamente a questo oggetto. Questo mi ha tormentato per qualche tempo mentre stavo usando iOS 5 in versione beta, quindi forse puoi aiutarti ora che la NDA si è risolta.

Grazie!

+0

Hai capito? Ho lo stesso identico problema. – danbretl

+0

Bene, ho inviato un biglietto per Apple, e dopo un po 'sono tornati con "UILabel non può davvero fare quello che stai chiedendo", a causa di qualche motivo tecnico. Non ho davvero trovato un lavoro in giro e ho deciso di cambiare il design di questo progetto per altri motivi che hanno reso questa questione irrilevante. Scusate! – maxluzuriaga

+0

Nessun problema. Grazie per l'aggiornamento. Se trovo una soluzione affidabile, invierò una risposta. La maggior parte del tempo non è troppo difficile per me, quindi al momento non sto investendo molto tempo su di esso. – danbretl

risposta

0

Se si utilizza un controller di navigazione è possibile impostare il titoloView di un determinato UIViewController che viene visualizzato. Questa vista titolo può essere una UIImageView con il titolo come risorsa .png.

Ad esempio:

All'interno della vostra UIViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
      self.navigationController.navigationItem.titleView = [[UIImageView alloc] initWithImage:@"yourheader.png"]; 
    } 

    return self; 
} 

Si può giocare un po 'con le dimensioni della tua immagine per renderla adatta in modo corretto.

Spero che questo possa essere d'aiuto.

+2

Ne sono consapevole, ma nella mia app il titolo deve cambiare per ogni nuovo controller di visualizzazione, inclusa la modifica dinamica in base all'input dell'utente, quindi una soluzione statica come questa non funzionerebbe. – maxluzuriaga

0

È possibile accedere alla clipToBounds o alla proprietàFontSizeToFitWidth di UILabel?

In alternativa è possibile scegliere una dimensione del carattere che ha reso l'etichetta pinna nella vista UILabel. 'Disponibile una descrizione su come regolare la dimensione del carattere per una data rect qui:

How to adjust font size of label to fit the rectangle?

1

si potrebbe usare s titleViewUINavigationItem' per impostare un UILabel con un carattere personalizzato, e quindi sovrascrivere setTitle: per aggiornare la vostra abitudine etichetta. Se necessario, è possibile chiamare l'etichetta sizeToFit o aggiornare manualmente il frame dopo aver utilizzato sizeWithFont: o uno degli altri metodi di dimensionamento NSString.

1

Ho avuto lo stesso identico problema e non riesco a trovare nessuna soluzione recente sull'argomento.

Ecco un articolo che ho trovato anche se con una grande spiegazione del problema: https://web.archive.org/web/20161228102731/http://tinymission.com/post/subclassing-uibutton

L'autore di questo articolo dice:

Vedete, Apple (o chiunque progettata la classe UIButton) ha deciso di calcola automaticamente la larghezza dell'etichetta del pulsante in base alla larghezza riportata delle lettere dei caratteri. ... Il problema si presenta principalmente con caratteri corsivi e corsivi. ... Il modo in cui nidificano è che il progettista di font effettivamente disegna la lettera intenzionalmente al di fuori dei suoi limiti calcolati. Ciò consente a due lettere corsive di toccare e altri stili di lettere di essere più vicini tra loro in modo che una lettera come "f" non sembri anormalmente lontana da una lettera "t".

Spero che questo aiuti le persone future che incappano in questo post con lo stesso problema!

Problemi correlati