iphone - UINavigationItem#titleView 对齐问题

标签 iphone uinavigationbar uinavigationitem

我发现有关使用 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/

相关文章:

iphone - 页面控制问题

iphone - 如何在iPhone中使用邮件访问配置文件(MAP)

iphone - 一个 hello world 应用程序,但导致错误 "image not found"

iPhone 定位服务 - 如何识别已使用哪些来源(WLAN、GPS)

swift - 如何设置导航栏字体颜色和大小

ios - 影响 UINavigationBar 的后退按钮方法 (iOS)

ios - Master/Detail 应用程序中的 NavigationItem

iOS statusBar 背景在转换后变黑

iphone - 如何使 UINavigationItem backBarButtonItem 矩形?

ios - 如何重新加载导航项标题