2012-03-28 15 views
7

Nie mam wielkiego szczęścia w wyśrodkowywaniu w pionie etykiety dodawanej do TitleView na UINavigationBar. Poniżej możesz zobaczyć, jak to wygląda.Wyrównanie etykiety pionowo w UINavigationBar TitleView

Text not vertically aligned

ten sposób Dodaję etykiecie:

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; 

Myślę, że powodem, dlaczego to robi to jest coś dziwnego z rzeczywistą czcionki używam - jak Musiałem zrobić wiele repozycjonowania wewnątrz guzików i tak dalej. Byłem w stanie rozwiązać problem wszędzie poza paskiem nawigacji.

+0

Zobacz ten post http://stackoverflow.com/a/8475788/716216 –

Odpowiedz

11

I skończył przy użyciu kombinacji RPM odpowiedzi w lewo i jeden z komentarzy na moje pytanie. To, co ostatecznie ustalone to dla mnie:

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

Jeśli używasz ten kawałek kodu, być może trzeba będzie grać z „Y” na tytuł wytwórni initWithFrame: zadzwoń. Mam ją ustawioną na 3.0f, ale być może trzeba ją trochę dostosować do własnego użytku.

Przyczyną, dla której inne rozwiązania nie sprawdziły się, byłyby poziome w poziomie, w zależności od tego, czy mam jeden przycisk (lewy czy prawy). Jeśli nie było żadnych przycisków, było w porządku, a jeśli były dwa, to było w porządku. Ale spowodowałoby to, że wyszedłby poza centrum.

+0

Świetne na iOS poniżej 5, ale na iOS 5 masz interfejs API wyglądu i nie musisz tego robić, więc zobacz @ Odpowiedź Moe. – bandejapaisa

1

Nie sądzę, że ma to coś wspólnego z czcionką. Użyłem również titleView i myślę, że sposób w jaki dziwnie prezentuje widok i nie bierze pod uwagę rozmiaru twojego widoku.

Można również ustawić ramkę widoku etykiecie jako taki

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

To nie wydaje się mieć znaczenie - chociaż ja wykorzystywać swoją odpowiedź w inny sposób! – Hosemeyer

+0

Ach tak - musisz dodać go do super widoku i przypisać go jako widok tytułowy. Przepraszam, powinienem był ci to powiedzieć wcześniej. Ja też to wiedziałem :( – RPM

+0

Co to jest titleLabel? –

28

Otwarcie starego pytania, ale okazało się, że jest to bardzo przydatne.

iOS 5 pozwala swoim używać [UINavigationBar appearance] co jest świetne do zmiany paska tytułowego w tytule widoku bez konieczności niestandardowego UIView:

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

Czasami, w zależności od UIFont, którego używasz, widok tytuł może być pionowo wyłączony.

Aby rozwiązać ten problem, można użyć:

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

(float) jest wartością dodatnią, aby skłonić titleView w dół, a ujemna wartość pchnąć titleView górę.

Mam nadzieję, że to pomoże.

+7

Możesz także ustawić pionową regulację pozycji przy użyciu wyglądu UINavigationBar, tj .: '[[Wygląd UINavigationBar] setTitleVerticalPositionAdjustment: (float) forBarMetrics: UIBarMetricsDefault];' –

+2

właśnie uratowałeś moją szyję, sir! weź moje uptoote! :) – nburk

+0

Nie ma za co nburk. :) – Moe

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

Nie to, o co prosił OP. – Cesare