如图设置SearchBar激活状态下,状态栏的背景色
demo.gif代码
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[self.view superview] setBackgroundColor:[UIColor redColor]];
}
-
注意必须在
viewDidAppear
中这样设置才有效在viewDidLoad
和viewWillAppear
中这段代码无效,为什么呢?话说这个控制器的生命周期有关. -
demo1.pngself.view superview
是谁?请看这个View的层次结构
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]];
- 好吧,现在不用我说大家也应该知道为什么不能在
viewDidLoad
和viewWillAppear
中用[self.view superview]
吧?
网友评论