如圖設(shè)置SearchBar激活狀態(tài)下,狀態(tài)欄的背景色
demo.gif
代碼
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[self.view superview] setBackgroundColor:[UIColor redColor]];
}
注意必須在
viewDidAppear
中這樣設(shè)置才有效在viewDidLoad
和viewWillAppear
中這段代碼無效,為什么呢?話說這個(gè)控制器的生命周期有關(guān).-
self.view superview
是誰?請看這個(gè)View的層次結(jié)構(gòu)
demo1.png
iOS程序里面某宪,window是程序視圖層次體系的最高層颤专。所有能看到的view弹灭,都是要加到這個(gè)window上才能被看到蝎土。
不管是直接被加到window上,還是通過superview被間接的加到window上,總之一個(gè)view你要想看到它,它必須要被加到一個(gè)window上去泻拦。
所以如果一個(gè)view的window屬性為nil的話,就說明這個(gè)view沒有被加到任何window上忽媒,是無法看到的
- 上面是網(wǎng)上摘抄的一段話,結(jié)合這句話,我們可以猜到這個(gè)紅色的View就是
window
,既然是window
,那么設(shè)置SearchBar
的激活時(shí)候的狀態(tài)欄背景色可以用另外一種熟悉的方法,而且這個(gè)方法可以在viewDidLoad
中設(shè)置;
[[UIApplication sharedApplication].keyWindow setBackgroundColor:[UIColor redColor]];
- 好吧,現(xiàn)在不用我說大家也應(yīng)該知道為什么不能在
viewDidLoad
和viewWillAppear
中用[self.view superview]
吧?