2017-05-28 29 views
0

を使用しているとき、私は私が使用UITabBarController()を持っているとAppDelegateに割り当てる:iOS10:ステータスバーを非表示UITabBarController()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    showTabBar() 
    return true 
} 

func showTabBar() { 
    let tabBarVC = TabBarVC() 
    if let window = self.window { 
     window.rootViewController = tabBarVC 
    } 
} 

私は次のキーを持っているがinfo.plistである:

enter image description here

TargetGeneralには、次の設定があります。

enter image description here

は私がステータスバーを非表示にするには、私のいずれかのタブに次のコードを使用します。

ボタンは、ログにプリントを「アニメーション」をタップする
class ViewController: UIViewController { 

    var statusBarShouldBeHidden = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override var prefersStatusBarHidden: Bool { 
     return statusBarShouldBeHidden 
    } 

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { 
     return .slide 
    } 


    @IBAction func buttonHideShowStatusBarTapped(_ sender: UIButton) { 
     statusBarShouldBeHidden = !statusBarShouldBeHidden 

     UIView.animate(withDuration: 0.25) { 
      self.setNeedsStatusBarAppearanceUpdate() 
      print("animating") 
     } 
    } 
} 

。ただし、ステータスバーは非表示にはなりません。

これはUITabBarController()に関連しているかどうかはわかりませんが、上記のコードはプロジェクトなしで正常に動作しているようです。

UITabBarController()を使用している場合、iOS10のステータスバーを非表示にするにはどうすればよいですか?

答えて

0

あなたはUIViewControllerサブクラスではなくUITabBarControllerサブクラスとしてTabBarVCを取った後、初期化し、それのビューにUITabBarControllerインスタンスを追加して、私はTabBarVCはのサブクラスであるべきだと思いますUITabBarControllerであり、ウィンドウのrootViewControllerでなければなりません。 TabBarVCをサブクラスUITabbarViewControllerに変更するとステータスバーが正常に動作しています。以下のコードを確認してください

class TabBarVC: UITabBarController, UITabBarControllerDelegate, UINavigationControllerDelegate { 

    //var mainTabBarController = UITabBarController() //not needed 

    init() { 
     super.init(nibName: nil, bundle: nil) 
     self.delegate = self 
     self.navigationController?.delegate = self 
     self.selectedIndex = 0 
     self.customizableViewControllers = [] 
     self.setViewControllers(self.topLevelControllers(), animated: false) 
    } 
0

ルートビューコントローラでsetNeedsStatusBarAppearanceUpdate()にする必要があります。つまり、TabBarVCです。ここでは解決策は以下のとおりです。

オーバーライドprefersStatusBarHiddenTabBarVCtopLevelControllers()方法

let one = self.viewControllerFromStoryBoard(storyboardName: "One", 
                sceneName: "Initial", 
                iconName: "", 
                title: "Tab One") as! ViewController 
one.tabBarVC = self 
tabBarVC変数を設定

var tabBarVC: UIViewController? 

ViewControllerクラスのTabBarVCへの参照を追加しますselectedViewController

override var prefersStatusBarHidden: Bool { 
    return mainTabBarController.selectedViewController?.prefersStatusBarHidden ?? false 
} 

の値を返すために

最後に、あなたの@IBActionであなたのステータスバーを更新

self.tabBarVC?.setNeedsStatusBarAppearanceUpdate() 
-1

ステータスバーを非表示にします。あなたはステータスバーを追加することができあなたのInfo.plistで

は当初YESを隠されています。

関連する問題