2012-03-28 84 views
7

我没有太多的运气将垂直居中的标签添加到UINavigationBar的TitleView上。你可以在下面看到它的样子。在UINavigationBar中垂直居中标签TitleView

Text not vertically aligned

这是我如何添加标签:

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; 

我觉得它为什么这样做的原因是有一些奇怪的与我使用的是实际的字体 - 如我不得不在按钮等内部重新定位。除了导航栏外,我已经能够解决这个问题了。

+0

看到这个职位http://stackoverflow.com/a/8475788/716216 – 2012-03-28 22:08:58

回答

11

我最终使用的答案RPM的组合,左,上我的问题的意见之一。这是最终的固定对我来说:

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

如果您在使用这个代码块,你可能有与标题标签的initWithFrame的“Y”值发挥:打电话。我已将它设置为3.0f,但您可能需要根据自己的用法对其进行调整。

其他解决方案似乎不适合我的原因是他们会水平偏离中心,这取决于我是否有一个barbutton(左或右)。如果没有酒吧按钮,那很好,如果有两个,那就很好。但是会导致它偏离中心。

+0

适用于iOS的不到5,但是对于iOS 5以上的版本,你有外观API,你不需要这样做,所以请参阅@ Moe回答。 – bandejapaisa 2013-08-19 11:21:51

1

我不认为这与你的字体有任何关系。我也使用过titleView,我认为它以奇怪的方式展示视图的方式并不考虑视图大小。

你也可以设置标签视图的帧作为这样

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

这似乎并没有发挥作用 - 虽然我没有使用你的答案以不同的方式! – Hosemeyer 2012-03-29 14:38:50

+0

啊是的 - 你需要将它添加到超级视图,并将其分配为标题视图。我很抱歉 - 我应该早点告诉你的。我也知道这个:( – RPM 2012-04-03 22:06:55

+0

其实什么是titleLabel? – 2012-11-09 07:42:30

28

打开一个老问题,但我发现这是非常有用的。

的iOS 5可以让您使用[UINavigationBar appearance]这是伟大的改变标题栏的标题视图,而无需自定义的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]]; 

有时候,这取决于你所使用的标题视图可以将UIFont垂直关闭。

为了解决这个问题,你可以使用:

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

(float)是推titleview的下一个正值,负值推titleview的了。

我希望这会有所帮助。

+7

您还可以使用UINavigationBar外观设置垂直位置调整,即:[[[UINavigationBar appearance] setTitleVerticalPositionAdjustment :((float)forBarMetrics:UIBarMetricsDefault];' – 2013-02-19 10:35:25

+2

您刚刚救了我的脖子,先生!拿我的upvote! :) – nburk 2014-12-10 17:30:25

+0

不客气,nburk。 :) – Moe 2014-12-11 13:58:59

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

不是OP要求的。 – Cesare 2017-03-04 15:20:24