默認(rèn)情況下,狀態(tài)欄樣式由視圖控制器實(shí)例屬性preferredStatusBarStyle控制。您只需要在視圖控制器中重寫preferredStatusBarStyle屬性启具,即可更改狀態(tài)欄樣式以返回所需的樣式墩崩。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
如果您的狀態(tài)欄沒有根據(jù)preferredStatusBarStyle中指定的值更改,請(qǐng)檢查Info.plist中查看基于控制器的狀態(tài)欄外觀鍵(UIViewControllerBasedStatusBarAppearance)馋吗,并確保將其設(shè)置為YES(true),代表View controller對(duì)status bar的設(shè)置優(yōu)先級(jí)高于application的設(shè)置秋秤『暝粒或者您可以簡(jiǎn)單地刪除這個(gè)外觀鍵。(這個(gè)建是舊版本iOS7中的屬性灼卢,現(xiàn)在基本上已經(jīng)不用了)
如果您希望動(dòng)態(tài)更改狀態(tài)欄樣式绍哎,例如根據(jù)當(dāng)前頁面滾動(dòng)列表的滾動(dòng)值進(jìn)行更改樣式。
由于preferredStatusBarStyle是一個(gè)只讀屬性鞋真,因此您無法直接設(shè)置樣式崇堰,但您可以通過簡(jiǎn)單的變量和setNeedsStatusBarAppearanceUpdate()方法控制它
var isDarkContentBackground = false // <1>
func statusBarEnterLightBackground() { // <2>
isDarkContentBackground = false
setNeedsStatusBarAppearanceUpdate()
}
func statusBarEnterDarkBackground() { // <3>
isDarkContentBackground = true
setNeedsStatusBarAppearanceUpdate() <4>
}
override var preferredStatusBarStyle: UIStatusBarStyle {
if isDarkContentBackground { // <5>
return .lightContent
} else {
return .darkContent
}
}
如果您在動(dòng)畫塊中調(diào)用setNeedsStatusBarAppearanceUpdate()方法,那么更改過程將一起動(dòng)畫化涩咖,并產(chǎn)生良好的褪色效果海诲。
func statusBarEnterLightBackground() { //
isDarkContentBackground = false
UIView.animate(withDuration: 0.3) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
func statusBarEnterDarkBackground() { //
isDarkContentBackground = true
UIView.animate(withDuration: 0.3) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
參考文章:
https://sarunw.com/posts/how-to-set-status-bar-style/
https://blog.csdn.net/qq_18674153/article/details/50592021
https://www.cnblogs.com/niit-soft-518/p/5900130.html
https://www.hangge.com/blog/cache/detail_2272.html