iOS 7 UINavigationBar外观第一次不起作用…

15

我正在尝试更改我的iOS7应用程序中UINavigationBar的外观。 我正在执行以下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];

    m_sNumberToCall = @"";

    UIBarButtonItem * btn = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"IconHome.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(btHomeTouched:)];
    self.navigationItem.leftBarButtonItem = btn;

    self.navigationController.navigationBar.translucent = YES;


    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"TVCNavBack.png"] forBarMetrics:UIBarMetricsDefault];

    NSShadow * shadow = [[NSShadow alloc] init];
    shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
    shadow.shadowOffset = CGSizeMake(0, 1);
    [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                           [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0],
                                                           NSForegroundColorAttributeName,
                                                           shadow,
                                                           NSShadowAttributeName,
                                                           [UIFont fontWithName:@"Helvetica-Bold" size:21.0],
                                                           NSFontAttributeName,
                                                           nil]];
}

但是,当我首次呈现UITableViewController时,它是标准的iOS7导航栏,然后我按下主屏幕并再次呈现它,它就变成了我的新外观。

有什么想法为什么第一次不起作用吗?


尝试将代码移动到viewDidAppear函数中。 - Ilario
我在那里尝试过了,但不行,我也在viewWillAppear中尝试过了。 - LilMoke
1
对于任何可能遇到相同问题的人,我将代码从这个改为了这个:[self.navigationController.navigationBar setBa…],以及在setTitleTextAttributes行中。 在这里找到答案:https://dev59.com/cWQm5IYBdhLWcg3wwxPF - LilMoke
2个回答

28

不要改变外观,直接修改导航栏。外观只影响未来的实例,而不影响已经创建的实例。

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"TVCNavBack.png"] forBarMetrics:UIBarMetricsDefault];

收件人:

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"TVCNavBack.png"] forBarMetrics:UIBarMetricsDefault];

6
我其实有同样的问题,而我是在我的导航控制器被实例化之前设置外观... - Julian F. Weinert
那解释了很多事情! - kokluch
真正的解决方案如下@fabf98dev所回答。您不需要使用navigationController,只需确保在显示第一个视图控制器之前调用此行(UINavigationBar.Appear..)。 - Has AlTaiar
一个很棒的答案! - Er.Gopal Vasani

2
之前的答案只帮助你更改背景图片,但无法更改标题文本属性。
您无需更改代码,只需将其移至AppDelegate.m文件中的applicationDidFinishLaunchingWithOptions中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接