如圖設置SearchBar激活狀態下,狀態欄的背景色
demo.gif
代碼
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[self.view superview] setBackgroundColor:[UIColor redColor]];
}
注意必須在
viewDidAppear
中這樣設置才有效在viewDidLoad
和viewWillAppear
中這段代碼無效,為什么呢?話說這個控制器的生命周期有關.-
self.view superview
是誰?請看這個View的層次結構
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]];
- 好吧,現在不用我說大家也應該知道為什么不能在
viewDidLoad
和viewWillAppear
中用[self.view superview]
吧?