[self.view superview]与SearchBar激活状态下的状态栏背景色

如图设置SearchBar激活状态下,状态栏的背景色

[self.view superview]与SearchBar激活状态下的状态栏背景色_第1张图片
demo.gif

代码

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [[self.view superview] setBackgroundColor:[UIColor redColor]]; 
}
  • 注意必须在viewDidAppear中这样设置才有效在viewDidLoadviewWillAppear中这段代码无效,为什么呢?话说这个控制器的生命周期有关.

  • self.view superview是谁?请看这个View的层次结构

    [self.view superview]与SearchBar激活状态下的状态栏背景色_第2张图片
    demo1.png

iOS程序里面,window是程序视图层次体系的最高层。所有能看到的view,都是要加到这个window上才能被看到。
不管是直接被加到window上,还是通过superview被间接的加到window上,总之一个view你要想看到它,它必须要被加到一个window上去。
所以如果一个view的window属性为nil的话,就说明这个view没有被加到任何window上,是无法看到的

  • 上面是网上摘抄的一段话,结合这句话,我们可以猜到这个红色的View就是window,既然是window,那么设置SearchBar的激活时候的状态栏背景色可以用另外一种熟悉的方法,而且这个方法可以在viewDidLoad中设置;
[[UIApplication sharedApplication].keyWindow setBackgroundColor:[UIColor redColor]];
  • 好吧,现在不用我说大家也应该知道为什么不能在viewDidLoadviewWillAppear中用[self.view superview]吧?

你可能感兴趣的:([self.view superview]与SearchBar激活状态下的状态栏背景色)