隱藏狀態(tài)欄
如果想要隱藏狀態(tài)欄,有兩種做法:
狀態(tài)欄是否隱藏默認由控制器管理,也就是說,當前狀態(tài)欄所對應的控制器決定是否隱藏狀態(tài)欄。
UIViewController中提供了一個prefersStatusBarHidden方法用于查看當前的控制器顯示的狀態(tài)欄是否隱藏,默認這個方法返回的是NO,也就是不隱藏。但是并沒有提供相應的方法來設(shè)置隱藏狀態(tài)欄。
這種情況我們可以重寫prefersStatusBarHidden方法,通過修改它的返回值達到目的。

這樣狀態(tài)欄就可以隱藏了。
另一種做法是不讓控制器來決定是否隱藏狀態(tài)欄,而是讓[UIApplication sharedApplication]來決定。

運行程序發(fā)現(xiàn)狀態(tài)欄并沒有隱藏。查看文檔可以發(fā)現(xiàn):
Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
意思是如果使用默認的控制器管理狀態(tài)欄(第一種做法提到的),那么設(shè)置statusBarHidden是沒有效果的。想要關(guān)閉控制器的管理,需要我們給Info.plist增加一個key:

并且設(shè)置為NO,這樣就可以通過設(shè)置statusBarHidden來隱藏狀態(tài)欄了。(這個key是Info.plist添加Key出現(xiàn)的下拉欄里的最后一個)
當控制器管理狀態(tài)欄時

這兩個方法可以將狀態(tài)欄的控制權(quán)交給子控制器管理,如果返回nil則表示控制器自己來管理狀態(tài)欄;如果返回子控制器,則表示子控制器來管理狀態(tài)欄。比如在navigation controller中實現(xiàn)prefersStatusBarHidden方法可能并不管用,因為它可能默認在childViewControllerForStatusBarHidden中返回的是導航棧頂控制器,此時狀態(tài)欄由棧頂控制器來決定。如果想讓navigation controller來決定,那么可以在類中按下面的方式實現(xiàn):

此時,狀態(tài)欄的管理權(quán)在導航控制器。