我想编辑应用程序的状态栏样式。但是,我无法从主UIViewController
对其进行编辑。因此,我认为由于嵌入了UIViewController
,所以堆叠了多个状态栏设置。
这是我在didFinishLaunchingWithOptions
方法中启动我的navigationController的方式:
let navigationVC = CustomNavigationController(rootViewController: MenuInstance)
navigationVC.setNavigationBarHidden(true, animated: false)
然后,出于某种原因,我在菜单UIViewController
(MenuInstance)中移动了其他UIViewController
的某些视图:
let scannerVC = ScannerViewController()
override func viewDidLoad() {
super.viewDidLoad()
addChildViewController(scannerVC)
scannerVC.didMove(toParentViewController: self)
}
我试图创建设置prefersStatusBarHidden = true
的类
class ModalViewViewController: UIViewController {
override var prefersStatusBarHidden: Bool {
get {
return true
}
}
override func viewDidLoad() {
super.viewDidLoad()
setNeedsStatusBarAppearanceUpdate()
}
}
我还为UINavigationController创建了一个类
class CustomNavigationController: UINavigationController {
override var prefersStatusBarHidden: Bool {
get {
return true
}
}
override func viewDidLoad() {
super.viewDidLoad()
setNeedsStatusBarAppearanceUpdate()
}
}
尝试删除状态栏的目的是找到状态栏的来源。我只希望菜单实例UIViewController
中的一个状态栏可以编辑。 UIViewController
的某些视图嵌入到一个UIViewController
中这一事实使我感到困惑。
答案 0 :(得分:1)
如果MenuInstance视图控制器是导航控制器的根视图控制器,那么prefersStatusBarHidden
的MenuInstance实现就很重要。没有参考其他视图控制器的首选项。 “嵌入”的内容无关紧要(除非您想使其有意义)。
class MenuInstance : UIViewController {
override var prefersStatusBarHidden: Bool {
get {
return true
}
}
}
但是请注意,这不适用于iPhoneX。您无法在iPhone X上隐藏状态栏。