1

我正在尝试使用代码更改导航栏的背景:

- (void)viewDidLoad
{
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"header_bg_smooth.png"] forBarMetrics:UIBarMetricsDefault];

    [super viewDidLoad];
...

}

它有效,但我遇到的问题是,当您返回此代码所在的视图时,更改首先生效。因此,如果您转到此视图,导航栏不会更改,但是如果您再进一步然后返回此视图,则更改将生效。

有谁知道问题可能是什么?

提前致谢

4

4 回答 4

2
 - (void)viewDidLoad
{
    [super viewDidLoad];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg_smooth.png"] forBarMetrics:UIBarMetricsDefault];
...

}
于 2013-04-24T07:40:41.187 回答
1

viewDidLoad仅在加载视图时触发一次。要在每次看到视图时运行代码,请将代码放入viewDidAppearor viewWillAppear(取决于您的使用情况)

答案可帮助您从或viewDidLoad中进行选择。viewDidAppearviewWillAppear

于 2013-04-24T07:38:45.223 回答
0

使用setBackgroundImage:forBarMetrics:方法:并将此方法写在viewWillAppear

[navbar setBackgroundImage:[UIImage imageNamed:@"navbar"] 
               forBarMetrics:UIBarMetricsDefault];

这会对你有很大帮助....

于 2013-04-24T07:39:52.010 回答
0

尝试这个..

UIView *backgroundView = ...
[navigationBar insertSubview:backgroundView atIndex:0];

另请参阅此链接.... setting-custom-background-for-uinavigationbar-what-will-work-on-ios5-and-ios4-too

于 2013-04-24T07:46:43.957 回答