【发布时间】:2018-04-25 07:38:52
【问题描述】:
我想用特定的视图控制器更改状态栏颜色。
根据 StackOverFlow 的回答,我做到了。
一个问题,在 iPhone 上切换应用时,我设置的颜色变淡,回到初始状态。
没关系。请注意状态栏。
不行。请注意状态栏。
-
设置
statusBar.backgroundColor,UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { statusBar.backgroundColor = [UIColor redColor ]; }
2. 将子视图插入状态栏。
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.插入层(CALayer)也是如此。
我尝试用断点分析它。
- 当应用处于活动状态时,双击 Home 键切换应用,该方法不调用 - (void)viewWillDisappear:(BOOL)animated 。这让我有点困惑。
- 我尝试在Application的方法- (void)applicationWillResignActive:(UIApplication *)application中更改状态栏的背景颜色,它不起作用。我不知道为什么。
虽然来自 Github 的源代码,通过 Runtime 就可以了。我的公司不喜欢使用 Runtime。
还有其他方法无需运行时吗?
而且我不知道运行时如何与 iPhone 的切换应用程序模式交互。
主要问题是解决它无需运行时。欢迎更多解释。我认为这很容易,我想念什么?
非常感谢您的进步。
【问题讨论】:
-
当您的应用处于非活动状态时,您无法更改状态栏颜色。当您在应用程序切换器窗口中时,操作系统控制状态栏的颜色,因为您的应用程序不是窗口上的活动应用程序。所以我不认为你想要做的事情是可能的。
-
感谢您的回复。 This repo 可以在运行时使用。而应用 meetup 也做得更复杂。
-
你说得对,我通过改变View来调整状态栏位置的背景色,