在UINavigationBar TitleView中垂直居中标签

时间:2012-03-28 21:06:08

标签: ios uilabel uinavigationbar

我没有太多运气将我正在添加到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;

我认为它之所以这样做是因为我使用的实际字体有些奇怪 - 因为我必须在按钮内部进行大量的重新定位等等。除了导航栏,我已经能够解决所有问题。

4 个答案:

答案 0 :(得分: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的负值。

我希望这会有所帮助。

答案 1 :(得分: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:call上使用“y”值。我把它设置为3.0f,但你可能需要根据自己的用途进行调整。

其他解决方案似乎对我不起作用的原因是,如果我有一个按钮(左或右),它们会偏离水平偏离中心。如果没有条形按钮就可以了,如果有两个就可以了。但是会导致它偏离中心。

答案 2 :(得分: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;

答案 3 :(得分:0)

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