切换应用时,设置iOS的导航栏的背景颜色失效

发布于 2022-09-06 04:17:08 字数 1464 浏览 30 评论 0

我想要改变指定控制器的导航栏的背景颜色。
切换应用时,我设置的导航栏的背景颜色失效了,感觉被初始化了。
进入App,设置没问题。请看导航栏。
图片0

切换应用时,设置的导航栏的背景颜色失效
图片1

搞不定。我列举一下,试过的代码:

1. 设置 statusBar.backgroundColor,

UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
     statusBar.backgroundColor = [UIColor redColor ];
}

2. 在 statusBar上插入子视图.

 UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
 UIView * backgroundColorView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 375, 20) ];
 backgroundColorView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
 backgroundColorView.backgroundColor = [UIColor redColor ];
 [statusBar.subviews.firstObject insertSubview: backgroundColorView atIndex:0];

3. 插入 layer,也一样, CALayer

我在Github上面,找到了实现的源码,通过Runtime 实现的。 但是我的领导,不准许我使用Runtime实现。
问下 不使用Runtime 的实现方式?
感觉不难,就是我没什么头绪。
望解决。
:-)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

荒路情人 2022-09-13 04:17:08

直接在 navigationBar 上添加 view,我这边可以,LZ试下
UINavigationBar *navigationBar = self.navigationController.navigationBar;

    [navigationBar.superview insertSubview:self.navigationBarBGView belowSubview:navigationBar];
浸婚纱 2022-09-13 04:17:08
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [UIApplication sharedApplication].statusBarStyle=UIStatusBarStyleLightContent;
    UINavigationBar *navigationBar = self.navigationController.navigationBar;
    self.navigationBarBGView = [[UIView alloc ]initWithFrame: CGRectMake(0, 0, KScreenWidth, 20) ];
    self.navigationBarBGView.backgroundColor = [UIColor redColor ];
    [navigationBar.superview insertSubview: self.navigationBarBGView aboveSubview: navigationBar];

}

- (void)viewWillDisappear:(BOOL)animated {
    [self.navigationBarBGView removeFromSuperview ];
    [super viewWillDisappear:animated];
}

系统的状态栏,是 UIWindow层。

UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

切换应用时,设置iOS的导航栏的背景颜色,只需要改View 层,就好了。

Mr_Liu 的答案,适用于 导航栏隐藏的界面。

[self.navigationController setNavigationBarHidden:YES animated: animated ];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文