UIAppearance的setTitleTextAttributes使故事板中设置的UINavigationBar标题在iOS 6中显示为椭圆化标题但不是iOS 5

时间:2012-09-25 00:31:05

标签: ios5 uinavigationbar ios6 uifont uiappearance

我一直在使用我认为是一些相当标准的iOS 5代码(并且在stackoverflow上是7x accepted answer),以便让我的UINavigationBar标题显示为自定义字体。]

但是我发现当我为iOS5构建的应用程序(以便它可以在iOS5和iOS6设备上运行)在iOS6模拟器上运行时,它会使我的标题变得非常简单。

iOS 4 inch Retina display simulator running iOS 6.0

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

iOS 3.5 inch Retinda display simulator running iOS 5.1

为清楚起见,以下是在我尝试在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];
    }

1 个答案:

答案 0 :(得分:3)

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

  1. 将标题文本设置为不同大小的文本 .storyboard(在我的情况下,我输入" ...",然后在viewDidLoad, 致电self.navigationItem.title = @"the GRID";

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

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

    不知道为什么iOS 5和iOS 6之间的这种行为有所不同,但这可以让它在两者中都有效。