iOS WKWebView状态栏填充

我一直在寻找一个有效的答案。 我正在尝试创建一个非常简单的WKWebView应用程序来包装Web应用程序。 我不需要任何花哨的东西,因为导航控件都在应用程序中。

目前我的ViewController.swift文件如下所示:

https://gist.github.com/andrewweaver/4a0e13245f185e8f31ba812b91f7dddd

Swift版本: Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42)

问题是状态栏的填充,我想调整它,以便状态栏不在内容之上,因为它在这里:

在此处输入图像描述

任何帮助都会非常感激,因为我对iOS开发很新。 我还希望能够更改状态栏颜色,但目前不是一个直接关注的问题。

我使用autolayout约束解决了这个问题,请检查

 import UIKit import WebKit class ViewController: UIViewController, WKUIDelegate { var webView: WKWebView! override func viewDidLoad() { super.viewDidLoad() setupWebView() let url = URL(string: "https://www.google.com") let request = URLRequest(url: url!) webView.load(request) } func setupWebView() { let webConfiguration = WKWebViewConfiguration() webView = WKWebView(frame:.zero , configuration: webConfiguration) webView.uiDelegate = self //view = webView view.addSubview(webView) webView.translatesAutoresizingMaskIntoConstraints = false view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":webView])) view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-20-[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":webView])) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

在此处输入图像描述 希望能帮助到你。

要完全在HTML / CSS中执行此操作(这将涉及您控制HTML),您需要将viewport-fit=cover添加到元viewport标记。 这告诉设备您希望webview填满整个屏幕,包括“安全区域”(例如状态栏后面)。

但是你也需要动态调整你的填充来处理iPhone X,它具有更大的状态栏区域,并包括扬声器和摄像头的凹口。

幸运的是,Apple为安全区域插入暴露了一些CSS常量,因此您可以利用CSS中的那些:即padding-top: constant(safe-area-inset-top);

我写了更多关于这个场景和iOS 11和iPhone X的新CSSfunction: https : //ayogo.com/blog/ios11-viewport/


如果您无法控制正在加载的HTML / CSS,则可以禁用Web视图的安全区域行为:

 if #available(iOS 11.0, *) { webView.scrollView.contentInsetAdjustmentBehavior = .never; } 

请注意,在iPhone X上,这可能会导致内容无法访问并被凹槽遮挡。