我没有太多运气将我正在添加到UINavigationBar
上的TitleView的标签垂直居中。你可以在下面看到它的样子。
这就是我添加标签的方式:
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 :(得分: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()]