iOS WKWebView 状态栏填充
iOS WKWebView Status Bar Padding
我一直在无休止地寻找有效的答案。我正在尝试创建一个非常简单的 WKWebView 应用程序来包装网络应用程序。我不需要任何花哨的东西,因为导航控件都在应用程序中。
目前我的 ViewController.swift 文件如下所示:
https://gist.github.com/andrewweaver/4a0e13245f185e8f31ba812b91f7dddd
Swift版本:
Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42)
问题是状态栏的填充,我想调整它,使状态栏不在内容之上,因为它在这里:
任何帮助将不胜感激,因为我是 iOS 开发的新手。我也希望能够更改状态栏颜色,但目前还不是当务之急。
我使用自动布局约束解决了这个问题,请检查
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 填满整个屏幕,包括 "safe areas"(比如状态栏后面)。
但您还需要动态调整内边距以处理 iPhone X,它具有更大的状态栏区域并包含用于扬声器和摄像头的槽口。
幸运的是,Apple 为安全区域插图公开了一些 CSS 常量,因此您可以在 CSS 中利用这些常量:
即,padding-top: constant(safe-area-inset-top);
我写了更多关于这种情况和 iOS 11 和 iPhone X 的新 CSS 功能:https://ayogo.com/blog/ios11-viewport/
如果您没有控制正在加载的HTML/CSS,那么您可以为您的网络视图禁用安全区域行为:
if #available(iOS 11.0, *) {
webView.scrollView.contentInsetAdjustmentBehavior = .never;
}
请注意,在 iPhone X 上,这可能会导致内容无法访问并被缺口遮挡。
let screenWidth = UIScreen.main.bounds.width
let screenHeight = UIScreen.main.bounds.height
self.webView = WKWebView(frame:CGRect( x: 0, y:UIApplication.shared.statusBarFrame.size.height, width:screenWidth, height: screenHeight ), configuration: WKWebViewConfiguration() )
确保导入 UIKit。
与所有设备兼容没有状态栏问题
我一直在无休止地寻找有效的答案。我正在尝试创建一个非常简单的 WKWebView 应用程序来包装网络应用程序。我不需要任何花哨的东西,因为导航控件都在应用程序中。
目前我的 ViewController.swift 文件如下所示:
https://gist.github.com/andrewweaver/4a0e13245f185e8f31ba812b91f7dddd
Swift版本:
Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42)
问题是状态栏的填充,我想调整它,使状态栏不在内容之上,因为它在这里:
任何帮助将不胜感激,因为我是 iOS 开发的新手。我也希望能够更改状态栏颜色,但目前还不是当务之急。
我使用自动布局约束解决了这个问题,请检查
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 填满整个屏幕,包括 "safe areas"(比如状态栏后面)。
但您还需要动态调整内边距以处理 iPhone X,它具有更大的状态栏区域并包含用于扬声器和摄像头的槽口。
幸运的是,Apple 为安全区域插图公开了一些 CSS 常量,因此您可以在 CSS 中利用这些常量:
即,padding-top: constant(safe-area-inset-top);
我写了更多关于这种情况和 iOS 11 和 iPhone X 的新 CSS 功能:https://ayogo.com/blog/ios11-viewport/
如果您没有控制正在加载的HTML/CSS,那么您可以为您的网络视图禁用安全区域行为:
if #available(iOS 11.0, *) {
webView.scrollView.contentInsetAdjustmentBehavior = .never;
}
请注意,在 iPhone X 上,这可能会导致内容无法访问并被缺口遮挡。
let screenWidth = UIScreen.main.bounds.width
let screenHeight = UIScreen.main.bounds.height
self.webView = WKWebView(frame:CGRect( x: 0, y:UIApplication.shared.statusBarFrame.size.height, width:screenWidth, height: screenHeight ), configuration: WKWebViewConfiguration() )
确保导入 UIKit。 与所有设备兼容没有状态栏问题