UINavigationItem#titleView对齐问题

时间:2011-06-08 19:52:53

标签: iphone uinavigationbar uinavigationitem

我发现很少有关于使用自定义字体使用UINavigationItem#titleView的信息。 当我这样做时,导航栏中的字体垂直未对齐。

此条目部分是为了记录黑客行为,并希望有人对这个问题有简洁的答案,因为我觉得我错过了一些简单的事情。

首先是hack,使用我自己的UILabel派生类:

@interface NavigationItemLabel : UILabel
- (void)setFrame:(CGRect)frame;
@end

@implementation NavigationItemLabel
- (void)setFrame:(CGRect)frame {
    // Called by UINavigationBar layoutSubviews.
    frame.origin.y -= self.font.descender;
}
@end

出于某种原因,无论我使用什么字体,frame.origin.y == -11。 有没有人对这是为什么有任何直觉?

添加我的字体的下行器(称为Gabriola的自定义字体)似乎有所帮助。如果没有这个黑客,文本将与导航栏中心下方的底部对齐。

这不适用于所有字体。

有没有人有更好的解决方案?

感谢。

2 个答案:

答案 0 :(得分:3)

如果您要部署到iOS 5+,可以查看UINavigationBar documentation中的titleVerticalPositionAdjustmentForBarMetrics媒体资源:

- (CGFloat)titleVerticalPositionAdjustmentForBarMetrics:(UIBarMetrics)barMetrics
Returns the title’s vertical position adjustment for given bar metrics.

此外,您应该查看titleTextAttributes(也是iOS5 +),您可以使用它来设置自定义字体:

NSDictionary *attributes = @{
    UITextAttributeFont: yourFont
};
[navBar setTitleTextAttributes:attributes];

如果您在iOS5上,我建议将UILabel包裹在UIView内,并将您的UIView设置为titleView(这允许您可以通过更改其frame)来进一步调整包装标签的位置。

如果您可以访问WWDC 2012视频(例如,如果您有开发者帐户),我强烈建议您在Advanced Appearance Customization on iOS上观看演讲(这些内容包含在那里)。

希望它有所帮助。

答案 1 :(得分:0)

我使用Grotesque遇到了同样的问题,@ kolyuchiy here显示了一个很好的SO解决方案。 (它涉及下载Apple Font Tool Suite命令行实用程序并调整自定义字体的ascender属性。