我已将 WKWebView
底部约束设置为 super View ,但它不会显示直到 super View ,而是显示内容直到安全区域。
这是显示底部未正确填充的问题图像。
这是 View 和约束图像的层次结构
以及使用容器 View 设置 WebView 约束的代码
let wv = WKWebView(frame: containerView.frame, configuration: wvConfig)
webView = wv
containerView.addSubview(wv)
// setup constraints
wv.translatesAutoresizingMaskIntoConstraints = false
if #available(iOS 11.0, *) {
wv.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true
wv.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true
wv.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
wv.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
} else {
NSLayoutConstraint(item: wv, attribute: .top, relatedBy: .equal, toItem: containerView, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: wv, attribute: .leading, relatedBy: .equal, toItem: containerView, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: wv, attribute: .trailing, relatedBy: .equal, toItem: containerView, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: wv, attribute: .bottom, relatedBy: .equal, toItem: containerView, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
}
那么,有人可以解决这里的问题吗?
Some certain URL's works, but not for all. Why?
最佳答案
以下子类 WKWebView 可能会解决您的问题:
class FullScreenWKWebView: WKWebView {
override var safeAreaInsets: UIEdgeInsets {
if #available(iOS 11.0, *) {
let insects = super.safeAreaInsets
return UIEdgeInsets(top: insects.top, left: insects.left, bottom: 0, right: insects.right)
} else {
return .zero
}
}
override var alignmentRectInsets: UIEdgeInsets{
let insects = super.alignmentRectInsets
return UIEdgeInsets(top: insects.top-20, left: insects.left, bottom: 0, right: insects.right)
}
}
以上片段截取 from
完整代码:
import UIKit
import WebKit
class FullScreenWKWebView: WKWebView {
override var safeAreaInsets: UIEdgeInsets {
if #available(iOS 11.0, *) {
let insects = super.safeAreaInsets
return UIEdgeInsets(top: insects.top, left: insects.left, bottom: 0, right: insects.right)
} else {
return .zero
}
}
override var alignmentRectInsets: UIEdgeInsets{
let insects = super.alignmentRectInsets
return UIEdgeInsets(top: insects.top-20, left: insects.left, bottom: 0, right: insects.right)
}
}
class ViewController: UIViewController {
let contaienrView: UIView = {
let v = UIView()
v.translatesAutoresizingMaskIntoConstraints = false
return v
}()
let webView: FullScreenWKWebView = {
let v = FullScreenWKWebView()
v.translatesAutoresizingMaskIntoConstraints = false
return v
}()
func setupViews(){
view.addSubview(contaienrView)
contaienrView.addSubview(webView)
let constrains = [
contaienrView.topAnchor.constraint(equalTo: view.topAnchor),
contaienrView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
contaienrView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
contaienrView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
webView.topAnchor.constraint(equalTo: contaienrView.topAnchor),
webView.leadingAnchor.constraint(equalTo: contaienrView.leadingAnchor),
webView.bottomAnchor.constraint(equalTo: contaienrView.bottomAnchor),
webView.trailingAnchor.constraint(equalTo: contaienrView.trailingAnchor),
]
NSLayoutConstraint.activate(constrains)
}
func loadRequest(){
let url = URL(string: "https://afghan-gps.com/mobile")!
let request = URLRequest(url: url)
webView.load(request)
}
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
loadRequest()
}
}
关于ios - WKWebView 底部约束集但不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57623677/