不管是UIView,還是UIViewController或者子類
在切換 ”設置“ 中的 “顯示與亮度” 中 模式時,都會調用一個方法,這個方法是系統API
swift:
//MARK:暗黑模式監聽
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if #available(iOS 13.0, *) {
if self.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
if UITraitCollection.current.userInterfaceStyle==UIUserInterfaceStyle.dark {
//暗黑模式
}else{
//明亮模式
}
}
} else {
// Fallback on earlier versions
}
}
oc:
//MARK:暗黑模式監聽
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection{
[super traitCollectionDidChange:previousTraitCollection];
if (@available(iOS 13.0, *)) {
if ([[UITraitCollection currentTraitCollection] userInterfaceStyle]==UIUserInterfaceStyleDark) {
}
else{
}
} else {
// Fallback on earlier versions
}
}
往往在初始化View時也要區分一下,是明亮模式還是暗黑模式。即使一上來會調用以上的方法,畢竟在VC中創建View不會寫到以上代理方法。
swift:
if #available(iOS 13.0, *) {
if UITraitCollection.current.userInterfaceStyle==UIUserInterfaceStyle.dark {
//暗黑模式
}else{
//明亮模式
}
} else {
// Fallback on earlier versions
}
oc:
if (@available(iOS 13.0, *)) {
if ([[UITraitCollection currentTraitCollection] userInterfaceStyle]==UIUserInterfaceStyleDark) {
}
else{
}
} else {
// Fallback on earlier versions
}
對顏色的適配就是這樣的。
而圖片適配請參考:https://www.jianshu.com/p/476cac3851c8?utm_campaign=maleskine
///////////////////////////////////////////////////////////////////////////
額外的,對WKWebView適配:在didFinished代理方法里面寫
//適配暗黑模式
var backgroundColor : String = ""
var labelColor : String = ""
if #available(iOS 13.0, *) {
if UITraitCollection.current.userInterfaceStyle==UIUserInterfaceStyle.dark {
//暗黑模式
backgroundColor = "\"#000000\"";
labelColor = "'#828282'";
}else{
//明亮模式
backgroundColor = "\"#FFFFFF\"";
labelColor = "'#666666'";
}
} else {
// Fallback on earlier versions
}
webView.evaluateJavaScript(String(format: "document.body.style.backgroundColor=%@", backgroundColor)) { (obj, error) in
}
webView.evaluateJavaScript(String(format: "document.getElementsByTagName('body')[0].style.webkitTextFillColor=%@", labelColor)) { (obj, error) in
}
