Hai*_* Ai 4 uiscrollview ios swift wkwebview
设置后contentInset,WKWebView我发现如果我使用默认的滑动手势在页面之间导航,WKWebView将不会保留contentInset并直接跳转到顶部,有人知道如何解决吗?谢谢!
我的示例代码:
import UIKit
import WebKit
class ViewController: UIViewController {
private lazy var webView: WKWebView = {
let view = WKWebView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
view.allowsBackForwardNavigationGestures = true
view.scrollView.contentInsetAdjustmentBehavior = .never
view.scrollView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)
view.navigationDelegate = self
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.view.addSubview(self.webView)
if let url = URL(string: "http://www.wikipedia.org") {
self.webView.load(URLRequest(url: url))
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果为 WKWebView 的滚动视图设置 contentInset,则需要为 WKWebview 的另一个属性设置相同的值。 view.setValue(UIEdgeInsets, forKey: "_obscuredInsets")
请参阅:https://opensource.apple.com/source/WebKit2/WebKit2-7600.1.4.11.10/ChangeLog
private lazy var webView: WKWebView = {
let view = WKWebView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
view.allowsBackForwardNavigationGestures = true
view.scrollView.contentInsetAdjustmentBehavior = .never
let edgeInsets = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)
view.setValue(edgeInsets, forKey: "_obscuredInsets")
view.scrollView.contentInset = edgeInsets
return view
}()
Run Code Online (Sandbox Code Playgroud)
如果设置 contentInsetAdjustmentBehavior = .automatic,状态栏会有额外的边缘。您还需要将状态栏高度添加到observedInsets。
view.scrollView.contentInsetAdjustmentBehavior = . automatic
webView.scrollView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)
webView.setValue(UIEdgeInsets(top: 50 + 44, left: 0, bottom: 0, right: 0), forKey: "_obscuredInsets")
Run Code Online (Sandbox Code Playgroud)
44是状态栏(safeArea)的高度。
检查了最新的WKWebView:https://github.com/WebKit/webkit/blob/master/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
现在需要添加一个额外的属性:_haveSetObscuredInsets
webView.setValue(true, forKey: "_haveSetObscuredInsets")
| 归档时间: |
|
| 查看次数: |
3676 次 |
| 最近记录: |