[self.view superview]與SearchBar激活狀態下的狀態欄背景色

如圖設置SearchBar激活狀態下,狀態欄的背景色

demo.gif

代碼

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [[self.view superview] setBackgroundColor:[UIColor redColor]]; 
}
  • 注意必須在viewDidAppear中這樣設置才有效在viewDidLoadviewWillAppear中這段代碼無效,為什么呢?話說這個控制器的生命周期有關.

  • 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]];
  • 好吧,現在不用我說大家也應該知道為什么不能在viewDidLoadviewWillAppear中用[self.view superview]吧?
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容