UINavigationItem#titleView对齐问题

emp*_*emp 5 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
Run Code Online (Sandbox Code Playgroud)

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

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

这不适用于所有字体.

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

谢谢.

Kri*_*tad 3

如果您要部署到 iOS 5+,您可以查看UINavigationBar 文档titleVerticalPositionAdjustmentForBarMetrics中的属性:

\n\n
- (CGFloat)titleVerticalPositionAdjustmentForBarMetrics:(UIBarMetrics)barMetrics\nReturns the title\xe2\x80\x99s vertical position adjustment for given bar metrics.\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
NSDictionary *attributes = @{\n    UITextAttributeFont: yourFont\n};\n[navBar setTitleTextAttributes:attributes];\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您不在iOS5 上,我建议将a 包裹起来并将 UIView 设置为(这允许您通过更改来进一步调整包裹标签的位置)。UILabelUIViewtitleViewframe

\n\n

如果您可以访问 WWDC 2012 视频(即,如果您有开发者帐户),我强烈建议您观看有关iOS 上高级外观定制的演讲(该内容包含在其中)。

\n\n

希望它能有所帮助。

\n