【问题标题】:Navbar not changing background immediately - IOS导航栏没有立即改变背景 - IOS
【发布时间】:2013-04-24 07:37:09
【问题描述】:

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

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

    [super viewDidLoad];
...

}

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

有人知道问题可能是什么吗?

提前致谢

【问题讨论】:

  • 保留这一行 [[UINavigationBar 外观] setBackgroundImage:[UIImage imageNamed:@"header_bg_smooth.png"] forBarMetrics:UIBarMetricsDefault];在 appdelgate didfinishlaunching 方法中,看看它是怎么来的......

标签: iphone ios objective-c navbar


【解决方案1】:
 - (void)viewDidLoad
{
    [super viewDidLoad];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg_smooth.png"] forBarMetrics:UIBarMetricsDefault];
...

}

【讨论】:

  • 这可能是正确的。为什么可能?这是因为self.navigationController.navigationBar 中不一定有值。可能是nil,如果是这样,您的代码将会崩溃。
  • @BurhanuddinSunelwala 这工作非常感谢!考虑 Shivan Raptor 写的内容并确保导航栏在那里
【解决方案2】:

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

answer 可帮助您从viewDidLoadviewDidAppearviewWillAppear 中进行选择。

【讨论】:

  • 这个答案对我帮助很大,但切换到 viewDidAppear 或 viewWillAppear 并没有成功
【解决方案3】:

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

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

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

【讨论】:

  • navbar?变量是从哪里来的?
  • 导航栏是self.navigationController.navigationBar的变量
【解决方案4】:

试试这个..

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多