当前位置: 首页 > 知识库问答 >
问题:

UIStatusBarStyle PreferredStatusBarStyle不工作在iOS7

龙欣德
2023-03-14

在我用Xcode 5为iOS 7构建的iPhone应用程序中,我在info中设置了UIViewControllerBasedStatusBarAppearance=YES。plist,在我的视图控制器中,我有以下代码:

-(UIStatusBarStyle) preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

但是状态栏在黑色背景的映衬下还是黑色的。

我知道可以通过在info中设置UIViewControllerBasedStatusBarAppearance=NO来改变整个应用程序。plist,但我实际上需要在运行时根据viewController对其进行修改。

共有3个答案

令狐宣
2023-03-14

对于preferredStatusBarStyle()要在UINavigationControllerUITabBarController中工作,我添加了以下代码,这将从当前可见的视图控制器中获取首选状态栏样式。

extension UITabBarController {
    public override func childViewControllerForStatusBarStyle() -> UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
    public override func childViewControllerForStatusBarStyle() -> UIViewController? {
        return visibleViewController
    }
}

对于Swift 3,这些不是方法,而是属性:

extension UITabBarController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}

Swift 4.2属性已重命名为:

extension UITabBarController {
   open override var childForStatusBarStyle: UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
   open override var childForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}

用法

class ViewController: UIViewController {

    // This will be called every time the ViewController appears
    // Works great for pushing & popping
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

}
酆鸿彩
2023-03-14

好吧,这是诀窍。您必须添加键“基于视图控制器的状态栏”,并将该值设置为否。

这与此键的含义相反,但即使将该值设置为No,也可以更改状态栏的外观,以及它是否在任何视图控制器中显示。所以它的行为像是“是”,但设置为“否”!

现在我可以得到状态栏白色或黑色。

卓新知
2023-03-14

我发现,如果ViewController位于navigationController中,则navigationController的导航栏。barStyle决定状态barStyle。

将导航栏的barStyle设置为UIBarStyleBlackTransparent将显示白色状态栏文本(即UIStatusBarStyleLightContent),而UIBarStyleDefault将显示黑色状态栏文本(即UIStatusBarStyleDefault)。

请注意,即使您通过其barTintColor完全更改导航栏的颜色,这也适用。

 类似资料:
  • 我需要通过耳机播放一些音频。我使用AudioTrack在设备上播放一些声音。并且音频模式被设置为流_语音_呼叫。此外,在我的活动中,免提电话是通过以下方式关闭的: 这似乎在2.3设备上运行得很完美。但在2.1上,声音仍然从扬声器播放。 为了解决这个问题,我尝试将setMode()用作: 有了这个,2.1和2.3的声音就可以通过耳机播放了,但2.3的大多数时候根本不会播放。此外,我在一些地方读到se

  • 后更新内核到4.0.3在ubuntu phpmadmin在xampp不工作 我试试这个 开始XAMPPLinux5.6.8-0...XAMPP:启动Apache...好的。XAMPP:启动MySQL...已经运行。XAMPP:开始ProFTPD...好的。 和 正在停止Linux 5.6的XAMPP。8-0... XAMPP:正在停止Apache。。。不跑。XAMPP:正在停止MySQL。。。好啊

  • 我试图让ESLint让我使用对象的Rest/传播。尽管我尽了最大努力,我还是得到了这个错误: 当我悬停在椭圆上时(<代码>...)用红色弯弯曲曲。 我的看起来像这样: 我确信prefs正在被阅读,因为规则、插件和样式指南正在按预期工作。 要启用对象rest/spread,是这里的关键(哈哈),它似乎对其他人有用。然而,它拒绝为我工作。我不知所措 更新:我使用的是Visual Studio代码v1.

  • 我有下面这个简单的应用程序,无论我把WEB-INF文件夹放在哪里,当我访问它时总是会出现这个错误http://localhost:8080: 2018-08-02 15:06:23.076警告716---[nio-8100-exec-1]o.s.web。servlet。PageNotFound:在名为“DispatcherServlet”的DispatcherServlet中找不到URI为[/WE

  • 我正在尝试将razorpay与php集成,一切正常,但在prefill中,我得到了一个默认值。如何将此值更改为自定义值?