如何在互联网可达性上使用 ios 快速更改状态栏颜色?

Posted

技术标签:

【中文标题】如何在互联网可达性上使用 ios 快速更改状态栏颜色?【英文标题】:How to Change the status bar color using ios with swift on internet reachability? 【发布时间】:2015-01-23 07:24:59 【问题描述】:

如果互联网已连接,我想更改设备状态栏的颜色,而不是状态栏颜色应变为黑色,如果未连接互联网,颜色或状态栏应变为红色,以指示互联网是否正常工作或不在使用 SWIFT 处理应用程序期间...帮帮我

【问题讨论】:

系统范围或仅在您的应用程序中,因为从 ios 7 开始,状态栏会覆盖您的应用程序,这意味着您可以轻松地在其后面放置一个视图并为该视图提供背景颜色以满足您的要求. Color text of status bar in XCode 6-b3 (Swift)的可能重复 可能会帮助任何仍在寻找这个的人。 Easy implementation of a colored view behind the status bar. 【参考方案1】:

在您的Info.plist 中,您需要将“基于控制器的状态栏外观”设置为布尔值。

如果您将其设置为YES,那么您应该在每个视图控制器中覆盖preferredStatusBarStyle 函数。

如果您将其设置为NO,那么您可以使用以下方法在AppDelegate 中设置样式:

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

【讨论】:

这仅允许您将状态栏的颜色从浅色更改为深色。 您只能将其更改为黑色或白色 你不能让它变成橙色或粉色,除非你将你的 iPhone 分别蘸上橙色或粉色油漆:D 但是您可以将视图放在它后面,并为该视图提供您想要的任何颜色。 这只是将状态从亮变为暗,我想你没有明白我的意思【参考方案2】:
override func viewWillAppear(animated: Bool) 
    self.navigationController?.navigationBarHidden =  true

    //Status bar style and visibility
    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = .LightContent

    //Change status bar color
    let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
    if statusBar.respondsToSelector("setBackgroundColor:") 
        statusBar.backgroundColor = UIColor.redColor()
    


【讨论】:

这正是我想要的。不过我确实稍微改变了一下:if let statusBar = UIApplication.sharedApplication().valueForKey("statusBar") as? UIView // my stuff 这就是我要找的!!谢谢! 不确定该放在哪里? @Mick 如果你想将样式应用到所有 UIViewControllers 你可以把它放在 AppDelegate application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?)。如果没有,这段代码应该在你想要的 UIViewController 的 viewWillAppear 中。【参考方案3】:

在 Swift 和 iOS9 中测试

如果您使用 导航控制器,请将其放入您的视图控制器类中:

override func viewDidLoad()
    ...
    self.navigationController?.navigationBar.barStyle = .Black

否则,覆盖 UIViewController 中的 preferredStatusBarStyle()

override func preferredStatusBarStyle() -> UIStatusBarStyle 
    return .LightContent

您可以找到更多信息here

【讨论】:

【参考方案4】:

对于 Swift 2.3

试试这些方法

// Get network status
class func hasConnectivity() -> Bool 
    let reachability: Reachability = Reachability.reachabilityForInternetConnection()
    let networkStatus: Int = reachability.currentReachabilityStatus().value
    return networkStatus != 0


// change status bar color
var navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.tintColor = UIColor.blueColor()
navigationBarAppearace.barTintColor = UIColor.blueColor()

tintColor属性改变导航栏的背景颜色

barTintColor属性对颜色的影响

但如果您想在运行时更改状态栏颜色,我认为更好的方法是在状态栏后面添加一个视图

【讨论】:

uicolorFromHex 函数在哪里? Hex转换为UIColor是我自己的方法。不过没关系,你可以用你想要的UIColor 替换uicolorFromHex: ;) 我知道这是你的方法,但你应该写在这里,我认为 *** 有明确和正确的答案。 也许你是对的,我用 UIColor 更新了方法。【参考方案5】:

对于 Swift 3

这应该适用于 Xcode 8 和 Swift 3

override var preferredStatusBarStyle: UIStatusBarStyle 
    return .lightContent

【讨论】:

【参考方案6】:

正如@rckoenes 评论的那样,从 iOS 7 开始,状态栏就会覆盖您的应用程序。因此,您可以在状态栏区域后面放置一个视图(距顶部 20 像素 - 状态栏的高度),并可以根据互联网连接状态的变化控制其背景颜色,没有其他选项可以更改状态栏颜色。

【讨论】:

我看到一个应用程序在互联网连接上使用状态栏,没有状态栏后面的视图,它使用 obj c 中的颜色或状态栏,但为了快速,我必须搜索出来跨度> @FattiKhan 如果您有任何可供参考的应用程序,您可以提及它,如果您可以使用 obj c 进行操作,那么您绝对可以使用 swift。如果您有任何参考代码,请也分享。 在某些情况下,您还必须将不透明度设置为 0.9 以使颜色与导航栏匹配【参考方案7】:

// 在您的 AppDelegate.swift 中的 didFinishLaunchingWithOptions 中: UINavigationBar.appearance().barTintColor = UIColor.greenColor()

//Optionally, if you need a specific color, how you do it with RGB:
UINavigationBar.appearance().barTintColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)

                                or 

在您的 Info.plist 中,您需要将“基于视图控制器的状态栏外观”设置为布尔值。

 UIApplication.sharedApplication().statusBarStyle = .LightContent

【讨论】:

是否需要进行其他设置?这对我不起作用。 @Andrej 打开您的 info.plist 并插入一个名为“查看基于控制器的状态栏外观”的新键,然后在 UIApplication.sharedApplication().statusBarStyle = .LightContent // AppDelegate 中添加此代码.swift in didFinishLaunchingWithOptions: 设置自定义颜色(例如 UIColor.greenColor() )不起作用。但是我可以确认设置为预定义样式.LightContent 可以正常工作。 啊哈,对不起。直到现在我才注意到自定义颜色只能设置为UINavigationBar,但不能设置为状态栏。问题标题仅与状态栏有关。【参考方案8】:

在黑色状态栏中显示白色文本: 在 Info.plist 中将 View controller-based status bar appearance 切换为 NO 在 AppDelegate.swift 添加 let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView statusBar.backgroundColor = UIColor.black 在 didFinishLaunchingWithOptions 中

【讨论】:

【参考方案9】:
UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: true)

【讨论】:

以上是关于如何在互联网可达性上使用 ios 快速更改状态栏颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中测试可达性并重试连接?

防止在首次启动 iOS 时调用 AFNetworking 可达性状态

如何挂钩 ios 连接更改

如何在没有互联网连接的情况下持续显示警报?

如何使用可达性类来检测有效的互联网连接?

如何在 Ios 上更改状态栏文本颜色