2017-11-28 9 views
0

私のアプリのステータスバーの背景色を変更するには、具体的に3のUIViewControllersを透明にし、残りを何かに設定したいと思っています。現在のViewControllerに基づいて背景色StatusBarを変更しますか?

どのビューコントローラが現在のビューコントローラであるかを確認する方法がわかりません。 if/else文でなければなりません。私は私のAppDelegateでこれを持っている:

extension UIApplication { 
    var statusBarView: UIView? { 
     return value(forKey: "statusBar") as? UIView 
    } 
} 

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    { 
     let appDelegate = UIApplication.shared.delegate as? AppDelegate 

     if let currentVC = appDelegate?.window?.rootViewController?.getCurrentlyDisplayedVC() 
     { 

      if currentVC is LoginVC || currentVC is RegisterVC || currentVC is LostPasswordVC { 
       UIApplication.shared.statusBarView?.backgroundColor = .clear 
      } else { 
       UIApplication.shared.statusBarView?.backgroundColor = Color_Main_Blue 
      } 
     } 

     UIApplication.shared.statusBarStyle = .lightContent 
     return true 
    } 
+0

私の留守を確認してください。 https://stackoverflow.com/questions/43073623/changing-the-color-of-the-status-bar/43073806#43073806あなたのお役に立てば幸いです! – byJeevan

答えて

1

私が正しく理解していれば、現在表示されているviewControllerを見つける必要があります。この拡張は、トリックを行う必要があります。

extension UIViewController { 
    func getCurrentlyDisplayedVC() -> UIViewController { 
     if let presentedVC = presentedViewController { 
      return presentedVC.getCurrentlyDisplayedVC() 
     } else if let split = self as? UISplitViewController, let last = split.viewControllers.last { 
      return last.getCurrentlyDisplayedVC() 
     } 
     else if let nav = self as? UINavigationController, let top = nav.topViewController { 
      return top.getCurrentlyDisplayedVC() 
     } 
     else if let tab = self as? UITabBarController { 
      if let selected = tab.selectedViewController { 
       return selected.getCurrentlyDisplayedVC() 
      } 
     } 
     return self 
    } 
} 

その後、あなたは現在のViewControllerを見つける必要がある場合は、お電話:

let appDelegate = UIApplication.shared.delegate as? AppDelegate 
if let currentVC = appDelegate?.window?.rootViewController?.getCurrentlyDisplayedVC() { 
     if currentVC is YourViewController { 
      //do what you need 
      (UIApplication.shared.value(forKey: "statusBar") as? UIView)?.backgroundColor = UIColor.white 
     } else { 
      //other checks 
     } 
    } 
+0

私は少し変更しましたが、青色の背景色が現れないことはまだわかります。これは、ログイン、登録、失われたパスワードビューコントローラで機能します。残りの部分は変更されません。それは変だ。私が間違ったことは分かりません。してください、上記の私の更新されたコードを参照してください – Dani

+1

あなたはアプリ起動時にこれを呼び出すようだ。あなたはあなたのVCを変更するたびにそれを呼び出す必要があります。さもなければ、statusBarはあなたが最初に設定した背景色を持ちます。 –

0

はあなたのためかもしれないが、以下のコードで作業してみてください。

関連する問題