2012-03-28 2 views
7

Ich habe nicht viel Glück, das Etikett, das ich dem TitleView auf dem UINavigationBar hinzufüge, vertikal zu zentrieren. Sie können sehen, wie es unten aussieht.Zentrieren von Label vertikal in UINavigationBar TitleView

Text not vertically aligned

Dies ist, wie ich hinzufüge, das Label:

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; 

denke ich, den Grund, warum es dies tut, ist es etwas seltsam mit der tatsächlichen Schriftart verwende ich - wie Ich musste eine Menge Reposition innerhalb von Knöpfen und so tun. Ich konnte das Problem überall lösen, außer in der Navigationsleiste.

+0

Siehe diesen Beitrag http://stackoverflow.com/a/8475788/716216 –

Antwort

11

ich links und einer der Kommentare auf meiner Frage eine Kombination aus der Antwort RPM endete eingestellt. Dies ist, was regelt es letztlich für mich:

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]; 

Wenn Sie dieses Stück Code verwenden, können Sie mit dem „y“ Wert auf dem Titeletikett Initwithframe spielen müssen: rufen. Ich habe es auf 3.0f eingestellt, aber Sie müssen es möglicherweise ein wenig für Ihren eigenen Gebrauch anpassen.

Der Grund, warum die anderen Lösungen für mich nicht zu funktionieren scheinen, ist, dass sie horizontal verschoben werden, je nachdem ob ich eine Taste (links oder rechts) habe. Wenn es keine Barknöpfe gab, war es in Ordnung, und wenn es zwei gab, war es in Ordnung. Aber man würde es aus der Mitte gehen lassen.

+0

Groß für iOS weniger als 5, aber für iOS 5 und Sie haben die Darstellung API und Sie müssen dies nicht tun, so siehe @ Moe Antwort. – bandejapaisa

1

Ich glaube nicht, dass dies etwas mit Ihrer Schriftart zu tun hat. Ich habe auch TitelView verwendet und ich denke, die Art und Weise, wie es die Ansicht auf eine seltsame Weise legt und nicht berücksichtigt, was Ihre Ansichtsgröße ist.

Sie könnten auch den Rahmen Ihrer Etikettenansicht als solche

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

Dies schien nicht einen Unterschied zu machen - obwohl ich in einer anderen Art und Weise benutzen, um Ihre Antwort haben! – Hosemeyer

+0

Ah ja - Sie müssen es zu einer Superansicht hinzufügen und diese als Titelansicht zuweisen. Es tut mir leid - das hätte ich dir früher sagen sollen. Ich wusste das auch :( – RPM

+0

Eigentlich was ist titleLabel? –

28

Öffnen einer alten Frage, aber ich fand das sehr nützlich.

iOS 5 ermöglicht Ihre [UINavigationBar appearance] zu verwenden, die für die Änderung, ohne die Notwendigkeit für eine benutzerdefinierte UIView der Titelleiste des Titelansicht ist groß:

[[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]]; 

Manchmal auf dem UIFont abhängig, die Sie verwenden, die Titelansicht kann vertikal sein.

Um dies zu beheben, können Sie verwenden:

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

(float) ein positiver Wert ist, um die Titleview nach unten zu drücken, und ein negativer Wert der Titleview nach oben zu drücken.

Ich hoffe, das hilft.

+7

Sie können die vertikale Positionseinstellung auch mit der UINavigationBar-Darstellung einstellen, zB: '[[UINavigationBar Aussehen] setTitleVerticalPositionAdjustment: (float) forBarMetrics: UIBarMetricsDefault];' –

+2

Sie haben mir gerade den Hals gerettet, Sir! Nimm meine Erwiderung! :) – nburk

+0

Gern geschehen nburk. :) – Moe

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

Nicht was OP gefragt hat. – Cesare