-->

指定使用UIAppearance的字体(用仅限iOS 5)当UINavigationBar的标题奇怪

2019-09-22 15:34发布

我使用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"];
}

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

UPDATE

我试着在viewDidLoad中明确地设置字体(只设置标题前),而不是让UIAppearance的使用,我还是看到了同样的问题,还是在iOS 5只。

Answer 1:

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

我固定这通过使用字体大小大于0.0

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


Answer 2:

我终于通过创建以下解决问题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";
}

它就像一个魅力! 希望你的作品呢!



Answer 3:

使用此代码:

[[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 title behaves oddly when specifying a font using UIAppearance (with iOS 5 only)