2017-05-28 2 views
0

Ich habe eine UITabBarController(), die ich verwende, und weisen in AppDelegate:iOS10: Verstecken Statusleiste, wenn ein UITabBarController() verwendet

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 
    } 
} 

Ich habe folgende Schlüssel ist in info.plist:

enter image description here

In meinem Target unter General habe ich die folgende Einstellung:

enter image description here

ich den folgenden Code in einer meiner Registerkarten verwenden, um die Statusleiste auszublenden:

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") 
     } 
    } 
} 

Wenn die Taste abgegriffen wird, druckt im Protokoll „Animieren“; Die Statusleiste wird jedoch nicht ausgeblendet.

Ich bin mir nicht sicher, ob dies mit UITabBarController() verwandt ist, aber der obige Code scheint in einem Projekt ohne es gut zu funktionieren.

Wie kann ich die Statusleiste in iOS10 ausblenden, wenn Sie UITabBarController() verwenden?

Antwort

0

Sie TabBarVC als UIViewController Unterklasse genommen haben, anstatt UITabBarController Unterklasse und dann initialisiert und hinzugefügt, um die UITabBarController Instanz es Ansicht ist, glaube ich TabBarVC Unterklasse sein sollte UITabBarController und sollte der rootViewController des Fensters sein. Wenn Sie die TabBarVC in Unterklasse von UITabbarViewController Statusleiste ändern funktioniert einwandfrei. Überprüfen Sie den Code unter

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

Sie müssen setNeedsStatusBarAppearanceUpdate() in Ihrem Root-View-Controller, d. H. TabBarVC. Hier ist die Lösung:

Aufschalten prefersStatusBarHidden in TabBarVC zurückzukehren Wert von selectedViewController

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

In Bezug auf TabBarVC in ViewController Klasse

var tabBarVC: UIViewController? 

Set tabBarVC Variable auf topLevelControllers() Methode

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

schließlich auf @IBAction aktualisieren Sie Ihre Statusleiste

self.tabBarVC?.setNeedsStatusBarAppearanceUpdate() 
-1

Zum Ausblenden der Statusleiste.

In Ihrem info.plist Sie Statusleiste hinzufügen können, wird zunächst zu JA versteckt.

Verwandte Themen