编辑状态栏样式嵌入viewController Swift

时间:2018-08-16 00:02:27

标签: ios swift

我想编辑应用程序的状态栏样式。但是,我无法从主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中这一事实使我感到困惑。

1 个答案:

答案 0 :(得分:1)

如果MenuInstance视图控制器是导航控制器的根视图控制器,那么prefersStatusBarHidden的MenuInstance实现就很重要。没有参考其他视图控制器的首选项。 “嵌入”的内容无关紧要(除非您想使其有意义)。

class MenuInstance : UIViewController {
    override var prefersStatusBarHidden: Bool {
        get {
            return true
        } 
    }
}

但是请注意,这不适用于iPhoneX。您无法在iPhone X上隐藏状态栏。