设置WKWebView scrollView的contentInset会导致页面跳到顶部

时间:2018-11-19 12:00:27

标签: ios swift uiscrollview wkwebview

在设置contentInset的{​​{1}}之后,我发现如果我使用默认的滑动手势在页面之间导航,WKWebView将不会保留WKWebView,而只会跳转 到顶部,有人知道如何解决吗?谢谢!

enter image description here

我的示例代码:

contentInset

1 个答案:

答案 0 :(得分:2)

如果为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
    }()

如果您设置contentInsetAdjustmentBehavior = .automatic,则状态栏会有额外的边缘。您还需要将状态栏的高度添加到obscuredInsets中。

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")

44是状态栏的高度(safeArea)。