Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.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
如何在iOS中更改状态栏文本颜色_Ios_Swift_Ios7_Statusbar_Uistatusbar - Fatal编程技术网

如何在iOS中更改状态栏文本颜色

如何在iOS中更改状态栏文本颜色,ios,swift,ios7,statusbar,uistatusbar,Ios,Swift,Ios7,Statusbar,Uistatusbar,我的应用程序背景很暗,但在iOS 7中,状态栏变得透明。所以我在那里什么也看不见,只有角落里的绿色电池指示灯。如何将状态栏文本颜色更改为主屏幕上的白色?这在中有说明,您需要Apple开发者ID才能直接访问。相关摘录: 因为状态栏是透明的,所以它后面的视图显示为透明。[…]使用UIStatusBarStyle常量指定状态栏内容是暗还是亮: UIStatusBarStyleDefault显示黑色内容。[……] UIStatusBarStyleLightContent显示灯光内容。当黑色内容位于状态栏

我的应用程序背景很暗,但在iOS 7中,状态栏变得透明。所以我在那里什么也看不见,只有角落里的绿色电池指示灯。如何将状态栏文本颜色更改为主屏幕上的白色?

这在中有说明,您需要Apple开发者ID才能直接访问。相关摘录:

因为状态栏是透明的,所以它后面的视图显示为透明。[…]使用
UIStatusBarStyle
常量指定状态栏内容是暗还是亮:

UIStatusBarStyleDefault
显示黑色内容。[……]

UIStatusBarStyleLightContent
显示灯光内容。当黑色内容位于状态栏后面时使用

也可能感兴趣的是:


在iOS 7中,您可以从单个vew控制器控制状态栏的样式,并在应用程序运行时进行更改。要选择此行为,请将
UIViewControllerBasedStatusBarAppearance
键添加到应用程序的
Info.plist
文件中,并为其指定值
YES

我绝对建议您浏览一下该文档,您也可以使用您的Apple开发者ID访问该文档


  • 在.plist文件中将
    UIViewControllerBasedStatusBarAppearance设置为
    YES

  • viewdiload
    中执行
    [self-setNeedsStatusBarAppearanceUpdate]

  • 添加以下方法:

    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }
    
  • 注意:这不适用于
    UINavigationController
    内部的控制器,请参阅:)

    Swift 3-这将在
    UINavigationController
    内的控制器中工作。在控制器中添加此代码

    // Preferred status bar style lightContent to use on dark background.
    // Swift 3
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    
    #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
    
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
    {
        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
        view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
        [self.window.rootViewController.view addSubview:view];
    }
    
    extension UIApplication {
    
        var statusBarView: UIView? {
            return value(forKey: "statusBar") as? UIView
        }
    
    }
    
    // Set upon application launch, if you've application based status bar
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
            return true
        }
    }
    
    
    or 
    // Set it from your view controller if you've view controller based statusbar
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        }
    
    }
    
    Swift 5和SwiftUI

    对于SwiftUI,创建一个名为
    HostingController.swift的新swift文件

    import Foundation
    import UIKit
    import SwiftUI
    
    class HostingController: UIHostingController<ContentView> {
        override var preferredStatusBarStyle: UIStatusBarStyle {
            return .lightContent
        }
    }
    
    window.rootViewController = UIHostingController(rootView: ContentView())
    


    或者,您可以选择退出基于视图控制器的状态栏外观:

  • Info.plist
    中,将
    查看基于控制器的状态栏外观设置为
    NO
  • 调用
    [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]

  • 注意:此方法在iOS9中已被弃用。在UIViewController上使用
    preferredStatusBarStyle
    。(请参阅)

    如果您有通过创建的嵌入式导航控制器,请确保在管理导航控制器的类中设置以下内容:

    -(UIStatusBarStyle)preferredStatusBarStyle{ 
        return UIStatusBarStyleLightContent; 
    } 
    

    这应该是您所需要的一切。

    您无需编写任何代码就可以做到这一点
    执行以下操作,使状态栏文本在整个应用程序中变为白色

    在您的项目plist上文件:

    • 状态栏样式:
      透明黑色样式(alpha为0.5)
    • 查看基于控制器的状态栏外观:
      NO
    • 状态栏最初是隐藏的:
      NO

    对于我来说,使用其他答案(以及其他来源/文档)中的所有内容都没有发生任何问题。帮助的是在XIB中将导航栏样式设置为“黑色”。这将文本更改为白色,而没有任何代码


    这适用于2013年9月18日发布的Golden Master iOS 7和Xcode 5 GM seed以及iOS7 SDK(至少在导航控制器隐藏的情况下):


  • 将UIViewControllerBasedStatusBarAppearance中的
    设置为
    NO
    Info.plist

  • ViewDidLoad
    方法或任何地方,您想在哪里更改 状态栏样式:
    [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]


  • 已更新Xcode GM种子的答案:

  • Info.plist
    put
    中查看基于控制器的状态栏外观
    as
    NO

  • 在项目中,设置:

  • 在ViewDidLoad中:

    [[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
    
    [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]


  • 我做了一些不同的事情,这对我很有用

    在代码中没有任何更改的情况下,我将.plist文件配置为:

    • 查看基于控制器的状态栏外观>否
    • 状态栏样式>UIStatusBarStyleLightContent(简单字符串)
    我希望有帮助

    编辑 对于每个视图控制器,我将情节提要中“状态栏”的模拟度量属性从“推断”更改为“轻内容”

    注意:大多数上浮答案不适用于iOS 7/8

    在Info.plist中,将“基于视图控制器的状态栏外观”设置为否

    在AppDelegate中添加

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    


    此解决方案适用于iOS 7/8

    如果您的UIViewController位于UINavigationController中,则必须设置BarStyle:

    -[UINavigationBar setBarStyle:UIBarStyleBlack]
    
    原来的答案在这里


    无需额外操作,只需在viewController中编写此代码,并将状态栏颜色设置为白色即可

    - (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
    
    简单的呼唤

    [[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
    

    -(BOOL)application:(UIApplication *)application 
               didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    }
    

    我的
    AppDelegate
    方法在iOS7中非常适合我。

    iOS 7允许各个视图控制器确定状态栏的外观,如Apple开发者文档所述:

    iOS 7使视图控制器能够在应用程序运行时调整状态栏的样式。动态更改状态栏样式的一个好方法是实现
    preferredStatusBarStyle
    ,并在动画块内更新状态栏外观,并调用
    setNeedsStatusBarAppearanceUpdate

    全局设置状态栏外观需要两个步骤

    首先,您需要告诉iOS,您不希望逐个视图设置状态栏的外观

    然后,您需要负责并实际设置新的全局状态栏样式

    要禁用逐视图状态栏控件,需要设置
    Vi
    
    [application setStatusBarHidden:NO];
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    
    #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
    
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
    {
        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
        view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
        [self.window.rootViewController.view addSubview:view];
    }
    
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    
    } 
    
    [[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
    
    navigationController?.navigationBar.barStyle = UIBarStyle.Black
    
    UINavigationBar.appearance().barStyle = .BlackTranslucent
    
      func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            // Override point for customization after application launch.
            UIApplication.shared.statusBarStyle = .lightContent
            return true
        }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
            return .lightContent
     }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.setNeedsStatusBarAppearanceUpdate()
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    
    extension UIApplication {
    
        var statusBarView: UIView? {
            return value(forKey: "statusBar") as? UIView
        }
    
    }
    
    // Set upon application launch, if you've application based status bar
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
            return true
        }
    }
    
    
    or 
    // Set it from your view controller if you've view controller based statusbar
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        }
    
    }
    
    override func viewDidAppear(_ animated: Bool) {
        navigationController?.navigationBar.barStyle = .black
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }