2019年10月24日 星期四

swift 5: 關於iOS 13.x 深色模式及Label文字顏色差異

深色模式會對APP 產生一響
 請看這一篇
  Apple WWDC 2019 SwiftUI Essentials video
    註: 可以打開右下角的三個點, 可以顯示字幕(有簡體中文)
  天生支援 dark mode 的 SwiftUI Color

 也就是說
  原本 light 模式中, Label Font Color Deuault是黑色
  APP畫面就會呈現為白底黑字

 但轉換為 dark模式
  Label Font Color Deuault是白色
  如依原本設計, 就會變成白底白字畫面, 白色字體就看不到了
  因此就要轉換畫面底色為黑色
  但原來的 Button 圖片是黑色外框, 這時就發生鋸齒,
  Button 圖片也要一起更換重畫.

解決方案來源:
 How to check if Dark Appearance is enabled tvOS
 Apple Developer UI Element Colors
 Apple Developer UIColor


 請在 info.plist增加一個Key
 <key>UIUserInterfaceStyle</key>
   <string>Automatic</string>


判斷是否為 iOS13
    if #available(iOS 13.0, *)
    {
     // Fallback on 13.0 versions
      checkInterfaceStyle()
    } 
    else 
    {
     // Fallback on earlier versions
    }

取得 brightness mode

 func checkInterfaceStyle()
 {
   guard(traitCollection.responds(to: #selector(getter: UITraitCollection.userInterfaceStyle)))
      else { return }

   let style = traitCollection.userInterfaceStyle

    switch style
    {
     case .light:
       print("light")
     case .dark:
       print("dark")
     case .unspecified:
       print("unspecified")
     @unknown default:
       print("unknown default")
       fatalError()
    }
 }


這是一個 Label Text 在新舊版本之間的程式差異

Main Storyboard中畫面的設定如下
 Main View 的 Background 設定為 System Background Color
  System Background Color light Mode 其實是白色
  System Background Color dark Mode 其實是黑色
 Label Color 設定為 Defalut( Label Color)
  Defalut Label Color light Mode 其實是黑色
  Defalut Label Color dark Mode 其實是白色


   if #available(iOS 13.0, *)
   {
    if( MyLabel.textColor != UIColor.label)
    {// 黑底白字, 只適用於 iOS 13.0以上版本
     MyLabel.textColor = UIColor.label
    }
   }
   else
   {  // Fallback on earlier versions
    if( MyLabel.textColor != UIColor.darkText)
    { // 白底黑字
     MyLabel.textColor = UIColor.darkText
    }
   }



沒有留言:

張貼留言