我使用了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
中有以下密钥:
在Target
下的General
下,我有以下设置:
我在其中一个标签中使用以下代码来隐藏状态栏:
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 :(得分: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