switch中判斷列舉型別,盡量避免使用default
通過switch陳述句來判斷列舉型別,不使用default,如果后期添加新的列舉型別,而忘記在switch中處理,會報錯,這樣可以提高代碼的健壯性.
iOS9之后全域動態修改StatusBar樣式
1. 區域修改StatusBar樣式
最常用的方法是通過控制器來修改StatusBar樣式
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
注意:如果當前控制器有導航控制器,需要在導航控制器中這樣設定(如下代碼),不然不起作用.
override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .default
}
這樣做的好處是,可以針對不同的控制器設定不同的StatusBar樣式,但有時往往會多此一舉,略嫌麻煩,那如何全域統一處理呢?
3. iOS9之后全域修改StatusBar樣式
我們可以用UIAppearance和導航欄的barStyle去全域設定StatusBar的樣式.
-
UIAppearance屬性可以做到全域修改樣式. -
導航欄的
barStyle決定了NavigationBar的外觀,而barStyle屬性改變會聯動到StatusBar的樣式.- 當
barStyle = .default,表示導航欄的為默認樣式,StatusBar的樣式為了和導航欄區分,就會變成黑色. - 當
barStyle = .black,表示導航欄的顏色為深黑色,StatusBar的樣式為了和導航欄區分,就會變成白色.
這個有點繞,總之就是
StatusBar的樣式和導航欄的樣式反著來. - 當
具體實作:
@IBAction func segmentedControl(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
// StatusBar為黑色,導航欄顏色為白色
UINavigationBar.appearance().barStyle = .default
UINavigationBar.appearance().barTintColor = UIColor.white
default:
// StatusBar為白色,導航欄顏色為深色
UINavigationBar.appearance().barStyle = .black
UINavigationBar.appearance().barTintColor = UIColor.darkNight
}
// 重繪window下的子控制元件
UIApplication.shared.windows.forEach {
$0.reload()
}
}
extension UIWindow {
func reload() {
subviews.forEach { view in
view.removeFromSuperview()
addSubview(view)
}
}
}
4. 怎么根據導航欄顏色自動修改StatusBar樣式
在修改導航欄顏色的時候,判斷下導航欄顏色的深淺
extension UIColor {
func isDarkColor() -> Bool {
var w: CGFloat = 0
self.getWhite(&w, alpha: nil)
return w > 0.5 ? false : true
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/304237.html
標籤:iOS
上一篇:Android系統編程入門系列之應用級檔案在應用程式間的共享
下一篇:Swift優化
