2

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

- (void)viewDidLoad
{
    [super viewDidLoad];

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

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

更新

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

4

3 回答 3

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";
}

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

于 2013-04-24T10:48:42.303 回答
0

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

我通过使用大于的字体大小解决了这个问题0.0

[[UINavigationBar appearance] setTitleTextAttributes:@{
    UITextAttributeFont : [UIFont fontWithName:@"HelveticaNeue-Medium" size:20.0]
}];
于 2013-03-16T03:18:22.790 回答
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];

看起来不太好,但工作!

于 2013-05-27T07:31:04.710 回答