0

我一直在使用我认为是一些相当标准的 iOS 5 代码(这是stackoverflow 上接受的 7 倍答案),以便让我的 UINavigationBar 的标题以自定义字体显示。]

但我发现当我为 iOS5 构建的应用程序(以便它可以在 iOS5 和 iOS6 设备上运行)在 iOS6 模拟器上运行时,它省略了我的标题。

运行 iOS 6.0 的 iOS 4 英寸 Retina 显示器模拟器

以下是在 iOS 5.1 模拟器上运行的相同代码。

运行 iOS 5.1 的 iOS 3.5 英寸 Retinda 显示器模拟器

为清楚起见,以下是在我尝试在 iOS 6 上运行之前一直有效的相关代码。

#define COURIER_FONT_BOLD @"CourierNewPS-BoldMT"

- (UIFont*)navigationBarTitleFontPortrait
{
    if (!_navigationBarTitleFontPortrait)
        _navigationBarTitleFontPortrait = [UIFont fontWithName:COURIER_FONT_BOLD size:24.0];
    return _navigationBarTitleFontPortrait;
}

// …

    if ([[UINavigationBar class] respondsToSelector:@selector(appearance)])
    {
        NSDictionary* attrs = [NSDictionary dictionaryWithObjectsAndKeys:
                                            [UIColor lightGrayColor],
                                                                UITextAttributeTextShadowColor,
                                            [NSValue valueWithUIOffset:UIOffsetMake(1, 0)],
                                                                UITextAttributeTextShadowOffset,
                                            navigationBarTitleFontPortrait,
                                                                UITextAttributeFont,
                                            nil];
        [[UINavigationBar appearance] setTitleTextAttributes:attrs];
    }
4

1 回答 1

3

我发现了上述问题的两种解决方案:

  1. 在 .storyboard 中将标题文本设置为不同大小的内容(在我的情况下,我输入了“...”,然后在 中viewDidLoad,调用self.navigationItem.title = @"the GRID";

  2. 在 viewDidLoad 中,执行[self.navigationController.navigationBar setNeedsLayout].

我更喜欢后者,因为它感觉不像是一个杂物。无论如何,我猜第一个解决方案会迫使第二个解决方案发生。

不知道为什么这种行为在 iOS 5 和 iOS 6 之间有所不同,但这允许它在两者中工作。

于 2012-09-25T00:31:04.817 回答