2012-03-28 16 views
7

Non ho molta fortuna centrando verticalmente l'etichetta che sto aggiungendo alla TitleView su UINavigationBar. Puoi vedere come appare qui sotto.Centra l'etichetta verticalmente in UINavigationBar TitleView

Text not vertically aligned

Questo è come mi sto aggiungendo l'etichetta:

UILabel *titleLabel = [[UILabel alloc] init]; 
titleLabel.text = NSLocalizedString(@"activeSessionsTitle",@""); 
titleLabel.font = [Util SETTING_NEO_HEADER_FONT]; 
titleLabel.textColor = [UIColor whiteColor]; 
titleLabel.backgroundColor = [UIColor clearColor]; 
titleLabel.textAlignment = UITextAlignmentCenter; 
titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f]; 
titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); 
[titleLabel sizeToFit]; 

super.navigationItem.titleView = titleLabel; 

Penso che il motivo per cui si sta facendo questo è che c'è qualcosa di strano con il tipo di carattere reale che sto utilizzando - come Ho dovuto fare un sacco di riposizionamento all'interno di pulsanti e così via. Sono stato in grado di risolvere il problema ovunque tranne la barra di navigazione.

+0

Vedi questo post http://stackoverflow.com/a/8475788/716216 –

risposta

11

ho finito per usare una combinazione della risposta giri a sinistra e uno dei commenti sulla mia domanda. Questo è ciò che in ultima analisi, ha risolto il tutto per me:

UIView *customTitleView = [[UIView alloc] init]; 
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 3.0f, 200.0f, 30.0f)]; 
titleLabel.text = titleString; 
titleLabel.font = [Util SETTING_NEO_HEADER_FONT]; 
titleLabel.textColor = [UIColor whiteColor]; 
titleLabel.backgroundColor = [UIColor clearColor]; 
titleLabel.textAlignment = UITextAlignmentCenter; 
titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f]; 
titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); 
[titleLabel sizeToFit]; 

customTitleView.frame = CGRectMake(self.navigationItem.titleView.frame.size.width/2 - titleLabel.frame.size.width/2, self.navigationItem.titleView.frame.size.height/2 - titleLabel.frame.size.height/2, titleLabel.frame.size.width, titleLabel.frame.size.height); 

[customTitleView addSubview:titleLabel]; 
[titleLabel release]; 

[self.navigationItem setTitleView:customTitleView]; 
[customTitleView release]; 

Se si utilizza questo pezzo di codice, potrebbe essere necessario giocare con il valore "y" sul initWithFrame dell'etichetta titolo: chiamare. Ho impostato su 3.0f, ma potrebbe essere necessario regolarlo un po 'per il proprio utilizzo.

La ragione per cui le altre soluzioni non sembravano funzionare per me è che sarebbero decentrate orizzontalmente a seconda che avessi un solo pulsante (sinistro o destro). Se non c'erano i pulsanti della barra andava bene, e se ce ne fossero due andava bene. Ma uno lo farebbe andare fuori centro.

+0

Ottimo per iOS meno di 5, ma per iOS 5 in poi hai l'API Aspetto e non hai bisogno di farlo, quindi vedi @ Risposta – bandejapaisa

1

Non penso che questo abbia qualcosa a che fare con il tuo font. Ho anche usato titleView e penso che il modo in cui definisce la vista in un modo strano e non prende in considerazione ciò che è la dimensione della vista.

È anche possibile impostare la struttura del vostro vista dell'etichetta come tale

titleLabel.frame = CGRectMake(self.navigationItem.titleView.frame.size.width/2 - titleLabel.frame.size.width/2, self.navigationItem.titleView.frame.size.height/2 - titleLabel.frame.size.height/2, titleLabel.frame.size.width, titleLabel.frame.size.height); 

self.navigationItem.titleView = titleLabel; 
+0

Questo non sembra fare la differenza - Anche se ho usato la vostra risposta in un modo diverso! – Hosemeyer

+0

Ah sì - è necessario aggiungerlo a una vista eccellente e assegnarlo come vista titolo. Mi dispiace - avrei dovuto dirtelo prima. Lo sapevo anche io :( – RPM

+0

In realtà ciò che è titleLabel? –

28

Aprire una vecchia domanda, ma ho trovato questo molto utile.

iOS 5 consente al usare [UINavigationBar appearance] che è grande per cambiare visualizzazione del titolo della barra del titolo, senza la necessità di un UIView personalizzato:

[[UINavigationBar appearance] setTitleTextAttributes: 
     [NSDictionary dictionaryWithObjectsAndKeys: 
      [UIColor redColor], 
      UITextAttributeTextColor, 
      [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8], 
      UITextAttributeTextShadowColor, 
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], 
      UITextAttributeTextShadowOffset, 
      [UIFont fontWithName:@"HelveticaNeue" size:25.0f], 
      UITextAttributeFont, 
      nil]]; 

A volte, a seconda del UIFont che si utilizza, il titolo della vista può essere verticalmente spento.

Per risolvere questo problema, è possibile utilizzare:

[self.navigationBar setTitleVerticalPositionAdjustment:(float) forBarMetrics:UIBarMetricsDefault]; 

(float) essere un valore positivo per spingere il titleView verso il basso, ed un valore negativo per spingere il titleView up.

Spero che questo aiuti.

+7

Puoi anche impostare la regolazione della posizione verticale usando l'aspetto di UINavigationBar, ad esempio: '[[UINavigationBar appearance] setTitleVerticalPositionAdjustment: (float) forBarMetrics: UIBarMetricsDefault];' –

+2

mi hai appena salvato il collo, signore! prendi il mio upvote! :) – nburk

+0

Prego nburk. :) – Moe

0
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName:UIFont(name:"Exo2-Bold", size: 18) as! AnyObject,NSForegroundColorAttributeName:UIColor.whiteColor()] 
+1

Non è quello che l'OP chiedeva. – Cesare

Problemi correlati