我发现有关使用 UINavigationItem#titleView 和自定义字体的信息很少。 当我这样做时,导航栏中的字体垂直不对齐。
这篇文章的部分目的是记录黑客行为,也希望有人对这个问题有一个简洁的答案,因为我觉得我错过了一些简单的东西。
首先是使用我自己的 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 的自定义字体)似乎有帮助。如果没有这个技巧,文本将与导航栏中心的下降部分的底部对齐。
这并不适用于所有字体。
有没有人有更好的解决方案?
谢谢。
最佳答案
如果您要部署到 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 上的演讲(这个东西包含在那里)。
希望它能有所帮助。
关于iphone - UINavigationItem#titleView 对齐问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6284405/