更改状态栏的背景颜色

Posted

技术标签:

【中文标题】更改状态栏的背景颜色【英文标题】:Change background color of status bar 【发布时间】:2019-11-20 04:48:36 【问题描述】:

我有一个非常简单的 Web 视图项目,它只加载一个网站。但是有一个错误,如果我向下滚动,网站内容会显示在状态栏中。

我读到这是因为 ViewController 的背景颜色设置为透明,如何将其更改为另一种颜色?

我试过这样:

let color = UIColor.black;
self.view.backgroundColor = color

但没有任何改变

完整代码:

ViewController.swift

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate 

    @IBOutlet var webView: WKWebView!

    override func viewDidLoad() 
        super.viewDidLoad()
        // 1  The webView loads the url using an URLRequest object.
        let url = URL(string: "https://www.blizz-z.de/")!

        webView.load(URLRequest(url: url))

        // 2  A refresh item is added to the toolbar which will refresh the current webpage.
        let refresh = UIBarButtonItem(
            barButtonSystemItem: .refresh,
            target: webView,
            action: #selector(webView.reload)
        )

        toolbarItems = [refresh]
        navigationController?.isToolbarHidden = true
        navigationController?.isNavigationBarHidden = true

    

    override func loadView() 
        webView = WKWebView()
        webView.navigationDelegate = self
        view = webView
        let color = UIColor.black;
        self.view.backgroundColor = color
    

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) 
        title = webView.title
    




我可以使用以下代码禁用状态栏来修复错误,但我尽量保留它:

override var prefersStatusBarHidden: Bool 
    return true

【问题讨论】:

如果它是您在网页视图中加载的网站,并且您的网站中存在标题栏,那么您如何在您的 ios 代码中更改它?如果这是不可能的情况,您需要在您的网站代码中进行更改。 状态栏不是来自我的网站,是来自 iPhone。 状态栏是透明的。结束。如果您不想在其后面显示某些内容,请不要在其后面放置任何内容。 @matt,那我应该怎么解决,明显是iOS或者Xcode的问题。我为 android 开发了完​​全相同的应用程序,那里一切正常。 不要将 webview 设置为 self.view。使用 self.view.addSubview() 将 webview 添加为子视图,并正确设置约束以省略顶部状态栏。不要忘记为 webview 将 clipsToBound 设置为 true。 【参考方案1】:
class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        let height = UIScreen.main.bounds.height
        let width = UIScreen.main.bounds.width

        let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: width, height: height))
        webView.load(URLRequest(url: (URL(string: "https://www.blizz-z.de/")!)))
        view.addSubview(webView)
         UIApplication.shared.statusBarView?.backgroundColor = #colorLiteral(red: 0.9529411765, green: 0.9529411765, blue: 0.9529411765, alpha: 1)
    




extension UIApplication 
    var statusBarView: UIView? 
        if responds(to: Selector("statusBar")) 
            return value(forKey: "statusBar") as? UIView
        
        return nil
    

【讨论】:

我不想隐藏状态栏。 override var prefersStatusBarHidden: Bool return true 删除此行并在此控制器后面添加导航控制器并设置导航颜色。 你想要什么?请分享任何屏​​幕。 我只是想让状态栏的背景颜色不透明。 从网站中的 html 字符串中获取背景颜色并设置状态栏背景颜色:- ***.com/a/39802582/9697632【参考方案2】:

使webView.top 约束相对于safeArea.top 约束,而不是superview.top 约束。这使您可以在状态栏下设置webView

【讨论】:

不,您可以通过编辑webView 的顶部约束从Storyboard 执行此操作。 约束是灰色的 您可以添加您的故事板文件的屏幕截图吗? (尝试向我们展示您的限制) 这里将WKWebview分配给self.view。 我不懂怎么做,我是初学者

以上是关于更改状态栏的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

更改标签栏的背景颜色

如何更改 iPhone 应用程序中状态栏的颜色? [复制]

在ios 7中将UI状态栏的背景颜色设置为黑色

如何更改导航栏的默认背景颜色? [复制]

我想更改 Bootstrap 导航栏的背景颜色。 [复制]

使用 AppCompat 更改操作栏的背景颜色