1. 程式人生 > >iPad使用相機中的一個坑(UIModalPresentationStyle,UIStatusBar)

iPad使用相機中的一個坑(UIModalPresentationStyle,UIStatusBar)

今天解決了一個相機相關的bug,感覺有些人可能也會遇到,就說一下吧。
問題是這樣子的,我們應用在使用者資訊頁面,需要支援更換頭像,這裡需要能夠直接從相機獲取,同樣的程式碼,在iPhone上沒有任何問題,切換到iPad以後,發現照相頁面總是會出現statusBar,無論是重寫prefersStatusBarHidden函式還是通過[[UIApplication sharedApplication] setStatusBarHidden:YES]進行設定都不生效,具體的現象可以看下圖:

現象.jpg

後來各種查文件,找資料,才發現是由於使用者資訊頁面是通過UIModalPresentationStyleFormSheet

方式present導致的問題,這樣present出來的頁面對statusBar的設定都是無效的。必須設定controllermodalPresentationCapturesStatusBarAppearance屬性才可以。
設定以後,新的頁面對statusBar的設定才會有效。

When you present a view controller by calling the present(_:animated:completion:)
method, status bar appearance control is transferred from the presenting to the presented view controller only if the presented controller'��s

modalPresentationStyle
value is fullScreen
. By setting this property to true
, you specify the presented view controller controls status bar appearance, even though presented non-fullscreen.
The system ignores this property’s value for a view controller presented fullscreen.

文件中描述了,預設只有全屏模式的presentedController

才會轉換statusBar的控制權,否則statusBar仍舊由前一個頁面控制。如果想要present一個非全屏的頁面,又要控制statusBar,那麼就要把這個屬性設定為true

蘋果的開發文件中對這個屬性已經做了描述,但卻由於不經常使用被我和同時都給忽略了,才會出現這樣的問題,希望我們讀文件時能夠細心一點,避免再次出現這樣的問題。