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