使用UIAppearance指定字体时UINavigationBar标题表现奇怪(仅限iOS 5)

时间:2012-09-20 00:13:31

标签: ios uiappearance

我正在使用UIAppearance为我的应用设置我的UINavigation栏标题的字体。

如果我没有设置外观字体,标题会立即按预期显示,并且其演示文稿不会动画。

但是,当我使用UIAppearance指定替代字体时,会出现标题(使用指定的字体),但在iOS 5上加载时会出现某种动画过渡。它有时会停止(?)并仅显示第一个字符标题。如果我再次选择标签,则标题会正确显示。

我只在iOS 5上看到此问题,并且在iOS 6上使用字体设置标题的行为正确。

在iOS 5的模拟器上也可以看到此问题,并且在模拟器中再次使用iOS 6正常运行。

我在AppDelegate中设置外观,如下所示......

[[UINavigationBar appearance] setTitleTextAttributes:
    [NSDictionary dictionaryWithObjectsAndKeys:
        [UIFont fontWithName:FONT_OF_ALL_KNOWLEDGE size:0.0f], UITextAttributeFont,
            nil]];

对于每个[标签]视图,条形图标题都在viewDidLoad中设置,

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.navigationItem setTitle:@"Title"];
}

有没有其他人看过这个问题,是否有修复?感谢。

更新

我尝试在viewDidLoad中显式设置字体(在设置标题之前),而不是使用UIAppearance,我仍然看到同样的问题,但仍然只在iOS 5上。

3 个答案:

答案 0 :(得分:1)

我最终通过创建以下UIViewController类别来解决问题:

#import <UIKit/UIKit.h>

@interface UIViewController (A4UExtras)

+ (NSDictionary *)defaultTitleTextAttributes;

@end


#import "UIViewController+A4UExtras.h"

@implementation UIViewController (A4UExtras)

+ (NSDictionary *)defaultTitleTextAttributes
{
    NSDictionary *navBarTextAttributes = @{
                                           UITextAttributeTextColor         :   [UIColor whiteColor],
                                           UITextAttributeFont              :   [UIFont fontWithName:@"Avenir-Book" size:17.0],
                                           UITextAttributeTextShadowColor   :   [UIColor colorWithRed:0 green:0 blue:0 alpha:.35],
                                           UITextAttributeTextShadowOffset  :   @1,
                                           };

    return navBarTextAttributes;
}

@end

当然,按照您希望的方式配置文本属性。然后,在我的所有视图控制器的viewDidLoad方法中,我执行以下操作:

#import "UIViewController+A4UExtras.h"

…

- (void)viewDidLoad
{
    [super viewDidLoad];

    // NavBar appearance and setup
    self.navigationController.navigationBar.titleTextAttributes = [UIViewController defaultTitleTextAttributes];

    self.navigationItem.title = @"My Title";
}

它就像一个魅力!希望它也适合你!

答案 1 :(得分:0)

有类似的问题。我的UINavigationBar只会在iOS上的代码(self.title = @"Title")中设置时显示标题的一个字符&lt; 6.0。

我通过使用大于0.0的字体大小来修复此问题:

[[UINavigationBar appearance] setTitleTextAttributes:@{
    UITextAttributeFont : [UIFont fontWithName:@"HelveticaNeue-Medium" size:20.0]
}];

答案 2 :(得分:0)

使用此代码:

[[UINavigationBar appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
    [UIFont fontWithName:FONT_OF_ALL_KNOWLEDGE size:0.0f], UITextAttributeFont,
        nil]];
// Present a temp UIViewController 
UIViewController *vc = [[UIViewController alloc]init];
[self presentViewController:vc animated:NO completion:nil];//"self" is an instance of UIViewController
[vc dismissViewControllerAnimated:NO completion:nil];

似乎不太好,但是工作!