使用UIAppearance指定字体时,UINavigationBar标题performanceexception(仅适用于iOS 5)

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

如果我没有设置外观字体,那么标题就会像预期的那样立即显示出来,而且它的显示效果不是animation的。

但是,当我使用UIAppearance指定一个替代字体时,标题会出现(使用指定的字体),但在iOS 5上使用某种animation转换显示。它有时会停顿(?),只显示标题的第一个字符。 如果我退后一步,标题显示正确。

我只在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中为每个[tabbed]视图设置,

 - (void)viewDidLoad { [super viewDidLoad]; [self.navigationItem setTitle:@"Title"]; } 

有没有其他人看到这个问题,有没有解决? 谢谢。

UPDATE

我已经尝试在viewDidLoad(只是在设置标题之前)中明确地设置字体,而不是使用UIAppearance,我仍然看到相同的问题,并且仍然只在iOS 5上。

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

我通过使用大于0.0的字体来解决此问题:

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

我最终通过创build下面的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 

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

 #import "UIViewController+A4UExtras.h" … - (void)viewDidLoad { [super viewDidLoad]; // NavBar appearance and setup self.navigationController.navigationBar.titleTextAttributes = [UIViewController defaultTitleTextAttributes]; self.navigationItem.title = @"My Title"; } 

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

使用此代码:

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

这似乎不好,但工作!