Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/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
单个视图的状态栏样式不变-Swift 2/iOS9_Ios_Swift_Swift2_Xcode7.3 - Fatal编程技术网

单个视图的状态栏样式不变-Swift 2/iOS9

单个视图的状态栏样式不变-Swift 2/iOS9,ios,swift,swift2,xcode7.3,Ios,Swift,Swift2,Xcode7.3,我希望将默认状态栏样式设置为某些视图控制器,而不是其他视图控制器。对于其他视图,我想将其设置为lightcontent 在接受另一篇帖子的建议后,我尝试在info.plist中将基于视图控制器的状态栏外观设置为YES,然后添加以下代码到viewController.swift(试图仅更改相关viewController的状态栏样式): 然而,尽管有人建议在这里这样做,但这不起作用: 最佳解决方案是什么?首先在info.plist中删除基于视图控制器的状态栏外观,然后将其添加到我的导航视图控制器,

我希望将默认状态栏样式设置为某些视图控制器,而不是其他视图控制器。对于其他视图,我想将其设置为lightcontent

在接受另一篇帖子的建议后,我尝试在info.plist中将基于视图控制器的状态栏外观设置为
YES
,然后添加以下代码到viewController.swift(试图仅更改相关viewController的状态栏样式):

然而,尽管有人建议在这里这样做,但这不起作用:


最佳解决方案是什么?

首先在info.plist中删除基于视图控制器的状态栏外观,然后将其添加到我的导航视图控制器,从而解决了此问题:

extension UINavigationController {

public override func childViewControllerForStatusBarHidden() -> UIViewController? {
    return self.topViewController
}

public override func childViewControllerForStatusBarStyle() -> UIViewController? {
    return self.topViewController
}
override public func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
}

override func prefersStatusBarHidden() -> Bool {
    return false
}
然后,我将其添加到连接到我的navigationController的viewController中:

extension UINavigationController {

public override func childViewControllerForStatusBarHidden() -> UIViewController? {
    return self.topViewController
}

public override func childViewControllerForStatusBarStyle() -> UIViewController? {
    return self.topViewController
}
override public func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
}

override func prefersStatusBarHidden() -> Bool {
    return false
}

编辑:您可以选择忽略xcode向您提供的与最后一步相关的任何警告-第一个函数可以从public更改为internal,并且仍然可以工作

我认为此评论(在您引用的问题中)解决了您的问题:“如果使用此方法,请确保在info.plist文件中设置标志,使基于视图控制器的状态栏标志为“是”。如果是,,此问题可能应作为重复问题删除。@Daniel如果您阅读了我的问题,您会发现我实际上遵循了此说明,并将标志标记为“是”。您可能需要调试视图层次结构,并确保应用程序的rootViewController可以正确找到具有childViewControllerForStatusBarStyle和childViewControllerForStatusBarHidden@markedwardmurray这不是问题的一部分。我已经解决了这个问题并回答了这个问题。Xcode生成了什么警告?除了特别允许的弃用警告之外,您应该始终注意Xcode引发的问题。