iOS 適配暗黑模式


不管是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
            
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM