当使用UIAppearance(仅限iOS 5)指定字体时,UINavigationBar标题行为异常

当使用UIAppearance(仅限iOS 5)指定字体时,UINavigationBar标题行为异常,ios,uiappearance,Ios,Uiappearance,我正在使用UIAppearance设置应用程序中UINavigation栏标题的字体 如果我没有设置外观字体,标题会立即出现,正如预期的那样,并且它的显示不会设置动画 但是,当我使用UIAppearance指定替代字体时,标题会显示(使用指定的字体),但在iOS 5上加载时会使用某种动画转换。它有时也会暂停(?),只显示标题的第一个字符。如果我来回切换选项卡,标题将正确显示 我只在iOS 5上看到这个问题,在iOS 6上用字体设置标题是正确的 这个问题也可以在iOS 5的模拟器上看到,并且在模拟

我正在使用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上出现。

也有类似的问题。在iOS<6.0上的代码(
self.title=@“title”
)中设置My
UINavigationBar
s时,仅显示标题的一个字符

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

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

我最终通过创建以下
UIViewController
category解决了问题:

#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
它就像一个符咒!希望它对你也有用

使用以下代码:

[[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];
这看起来不太好,但很有效

[[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];