iOS10:使用UITabBarController时隐藏状态栏()

时间:2017-05-28 12:25:16

标签: ios xcode uitabbarcontroller ios10 statusbar

我使用了UITabBarController()并在AppDelegate中分配:

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

Target下的General下,我有以下设置:

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中的状态栏?

2 个答案:

答案 0 :(得分:0)

您需要在根视图控制器中setNeedsStatusBarAppearanceUpdate(),即TabBarVC。这是解决方案:

覆盖prefersStatusBarHidden中的TabBarVC以返回selectedViewController

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

TabBarVC

中添加对ViewController的引用
var tabBarVC: UIViewController?

tabBarVC方法

上设置topLevelControllers()变量
let one = self.viewControllerFromStoryBoard(storyboardName: "One",
                                                  sceneName: "Initial",
                                                  iconName: "",
                                                  title: "Tab One") as! ViewController
one.tabBarVC = self

最后,在@IBAction上更新您的状态栏

self.tabBarVC?.setNeedsStatusBarAppearanceUpdate()

答案 1 :(得分:0)

您已将TabBarVC作为UIViewController子类而不是UITabBarController子类,然后初始化并将UITabBarController实例添加到其视图中,我认为TabBarVC应该是{的子类{1}}并且应该是窗口的rootViewController。如果将TabBarVC更改为UITabBarController状态栏的子类,则工作正常。检查下面的代码

UITabbarViewController