iPad使用相機中的一個坑(UIModalPresentationStyle,UIStatusBar)
今天解決了一個相機相關的bug,感覺有些人可能也會遇到,就說一下吧。
問題是這樣子的,我們應用在使用者資訊頁面,需要支援更換頭像,這裡需要能夠直接從相機獲取,同樣的程式碼,在iPhone上沒有任何問題,切換到iPad以後,發現照相頁面總是會出現statusBar
,無論是重寫prefersStatusBarHidden
函式還是通過[[UIApplication sharedApplication] setStatusBarHidden:YES]
進行設定都不生效,具體的現象可以看下圖:
後來各種查文件,找資料,才發現是由於使用者資訊頁面是通過UIModalPresentationStyleFormSheet
present
導致的問題,這樣present
出來的頁面對statusBar
的設定都是無效的。必須設定controller
的modalPresentationCapturesStatusBarAppearance
屬性才可以。設定以後,新的頁面對
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'��smodalPresentationStyle
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
。
蘋果的開發文件中對這個屬性已經做了描述,但卻由於不經常使用被我和同時都給忽略了,才會出現這樣的問題,希望我們讀文件時能夠細心一點,避免再次出現這樣的問題。