我发现很少有关于使用自定义字体使用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的自定义字体)似乎有所帮助。如果没有这个黑客,文本将与导航栏中心下方的底部对齐。
这不适用于所有字体。
有没有人有更好的解决方案?
感谢。
答案 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
属性。