Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 状态栏颜色赢得';无论发生什么,我们都不会改变_Ios - Fatal编程技术网

Ios 状态栏颜色赢得';无论发生什么,我们都不会改变

Ios 状态栏颜色赢得';无论发生什么,我们都不会改变,ios,Ios,我正在尝试更改应用程序中某个特定屏幕的状态栏颜色。 屏幕上的背景是黑色的,所以我试着用白色的状态栏来代替。 我尝试使用: override func viewDidAppear(_ animated: Bool) { UIView.animate(withDuration: 0.5, animations: { self.navigationController?.navigationBar.barStyle = .black }, completion: nil

我正在尝试更改应用程序中某个特定屏幕的状态栏颜色。 屏幕上的背景是黑色的,所以我试着用白色的状态栏来代替。 我尝试使用:

override func viewDidAppear(_ animated: Bool) {
    UIView.animate(withDuration: 0.5, animations: {
        self.navigationController?.navigationBar.barStyle = .black
    }, completion: nil)
}
一开始确实有效,但我在我的应用程序中添加了一个
TabBarController
,在那里我添加了4个
导航控制器(每个项目一个),这就是它的外观:

override func viewDidLoad() {
    super.viewDidLoad()

    let homeController = HomeVC()
    let homeNavigationController = UINavigationController(rootViewController: homeController)
    homeNavigationController.navigationBar.isHidden = true

    let favoritesController = WishlistVC()
    let favoritesNavigationController = UINavigationController(rootViewController: favoritesController)
    favoritesNavigationController.navigationBar.isHidden = true


    let cartController = CartVC()
    let cartNavigationController = UINavigationController(rootViewController: cartController)
    cartNavigationController.navigationBar.isHidden = true

    let storeController = BaseStoreVC()
    let storeNavigationController = UINavigationController(rootViewController: storeController)
    storeNavigationController.navigationBar.isHidden = true


    homeController.tabBarItem = UITabBarItem(title: home_string, image: UIImage(named: "home"), tag: 0)
    favoritesController.tabBarItem = UITabBarItem(title: favorites_string, image: UIImage(named: "favorites"), tag: 1)
    cartController.tabBarItem = UITabBarItem(title: cart_string, image: UIImage(named: "cart"), tag: 2)
    storeController.tabBarItem = UITabBarItem(title: store_string, image: UIImage(named: "store"), tag: 3)

    let tabBarItems = [homeNavigationController, favoritesNavigationController, cartNavigationController, storeNavigationController]

    viewControllers = tabBarItems

    setupTabBarAppearance()
}
此后,屏幕上的状态栏颜色保持为黑色。 我试图更改的屏幕属于
homeNavigationController
(但不是
homeController
)。 我从
homeController
移动到我试图改变的屏幕,如下所示:

    let vc = ProductDetailVC()
    self.navigationController?.pushViewController(vc, animated: true)
我也尝试在ProductDetailVC()中使用此选项:


这也不起作用。

控制状态栏样式的权限属于俯视图控制器。由于您更改了体系结构,现在这就是选项卡栏控制器。它将该决定降级到其当前子级,即导航控制器。只有选项卡栏控制器或其当前子控件对此事有发言权。因此,家庭导航控制器的
preferredStatusBarStyle
才是关键。未咨询VC的产品详细信息。这解释了您尝试使用
preferredStatusBarStyle
失败的原因

但是,无论如何,这是行不通的,因为正如您已经知道的,导航控制器决定其状态栏颜色的方式是基于导航栏的栏样式的。在您描述的体系结构中,让产品VC设置条形样式对我来说很有效:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    UIView.animate(withDuration: 0.5, animations: {
        self.navigationController?.navigationBar.barStyle = .black
    }, completion: nil)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIView.animate(withDuration: 0.5, animations: {
        self.navigationController?.navigationBar.barStyle = .default
    }, completion: nil)
}

因此,如果我真的希望homeNavigationController上的一个屏幕上的状态栏是白色的,而其余屏幕上的状态栏是黑色的,这是不可能的吗?添加了可能的解决方案。你也可以这样看谢谢,我看了@matt answer,这正是我现在拥有的,导航栏也被隐藏了,但它仍然不会改变。
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    UIView.animate(withDuration: 0.5, animations: {
        self.navigationController?.navigationBar.barStyle = .black
    }, completion: nil)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIView.animate(withDuration: 0.5, animations: {
        self.navigationController?.navigationBar.barStyle = .default
    }, completion: nil)
}