【问题标题】:Changing font of UINavigationBar更改 UINavigationBar 的字体
【发布时间】:2014-03-25 00:03:08
【问题描述】:

已解决

通过从“[UINavigationBar 外观]”更改为“self.navigationController.navigationBar”,我能够对实例本身进行更改,然后它也第一次加载

TLDR; UINavigationBar 字体不会改变,除非我加载另一个视图然后返回到第一个视图。

我有一个 iOS7 项目,我想更改已嵌入项目的 UINavigationBar 的外观。

我做了一些研究,发现如果我想改变 NavigationBar 的字体,我必须在 AppDelegate.m 和方法中这样做

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:

所以我在这里创建了这段代码:

- (void)changeAppearanceOfNavigationBar {
// Shadow
NSShadow *shadow = [[NSShadow alloc] init];

// Nagivation bar font
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],
                                                       NSForegroundColorAttributeName,
                                                       shadow, NSShadowAttributeName,
                                                       [UIFont fontWithName:@"HelveticaNeue-Thin" size:25.0],NSFontAttributeName, nil]];
NSLog(@"Font changed");
}

我从 didFinishLaunchingWithOptions 调用这个方法

所以,这段代码对字体没有任何作用,所以我尝试用另一种方式来做。

在我的第一个视图控制器(应用程序主页面)中,我在 viewDidLoad 中执行相同的代码

- (void)viewDidLoad {
NSShadow *shadow = [[NSShadow alloc] init];
    [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],
                                                           NSForegroundColorAttributeName,
                                                           shadow, NSShadowAttributeName,
                                                           [UIFont fontWithName:@"HelveticaNeue-Thin" size:25.0],NSFontAttributeName, nil]];

    self.navigationItem.title = @"TITLEEEE";

}

我的问题中“最好的”部分来了。 viewDidLoad 中的这段代码在启动时不会改变我的 UINavigationBar 的字体,但是如果我加载另一个视图并返回,它会改变。

【问题讨论】:

    标签: ios iphone objective-c fonts uinavigationbar


    【解决方案1】:

    您的属性名称错误,您需要:UITextAttributeFont、UITextAttributeTextColor

    【讨论】:

      【解决方案2】:

      从您的代码中可以看出,这些设置是在类上执行的,而不是在实例上执行的,这说明它在创建新实例时会在之后生效。 当调用 applicationDidFinishLaunching 时,栏的第一个实例已经创建,因此在类上进行设置为时已晚。 尝试在较早的时间进行此设置,例如即使在你的 main() 中。在这种特殊情况下,这应该没问题,您是在一个类上而不是在任何实例上进行设置。

      【讨论】:

      • 在我的 main 中执行 viewDidLoad 中的代码没有效果:/
      猜你喜欢
      • 2012-02-05
      • 2015-10-04
      • 2012-05-25
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 2015-10-29
      相关资源
      最近更新 更多