【问题标题】:WKWebView changes its content offset scroll after rotation (orientation changed)WKWebView 在旋转后改变其内容偏移滚动(方向改变)
【发布时间】:2021-06-23 16:42:43
【问题描述】:

当我在手机上从纵向旋转到横向时,网页视图会自动将其滚动更改到页面内容的底部。

我已经尝试过reloadInputViews 这个代码也不能正常工作:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        //webView.reloadInputViews()
        //webView.scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: false)
        webView.evaluateJavaScript("location.reload();", completionHandler: nil)
    }

这些都不会将网页视图滚动到顶部。实际上,如果可能的话,我什至不需要在旋转后进行此滚动。我想从顶部开始查看 Web 视图内容。不管是哪个方向。

【问题讨论】:

    标签: ios swift wkwebview swift5 uiinterfaceorientation


    【解决方案1】:

    如果您希望您的 webView 在旋转时始终滚动到页面顶部,您可以在包含 webView 的 ViewController 上实现此代码。但是,通过查看您注释掉的代码,您似乎已经尝试过非常相似的东西。

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        webView.scrollView.setContentOffset(CGPoint(x: 0, y: -self.webView.scrollView.contentInset.top), animated: false)
    }
    

    当我在手机上从纵向旋转到横向时,Web 视图会自动将其滚动更改到页面内容的底部。

    您确定这不是您的代码在某处的副作用吗?如果您在空项目上创建 webView,然后转到带有滚动条的示例网页(例如 Google 搜索结果),则旋转手机会保持 webView 的滚动位置。此外,如果你在一个带有 webview 的空项目中实现上面的代码,它会实现滚动到网页的顶部。

    【讨论】:

    • 感谢您的详细介绍!我在 Web 视图中显示 PDF,所以首先我加载 html 代码,然后基于 WKWebView 中的 html 生成 PDF 文件,我将其放入同一个 WKWevView,所以这个方法调用了两次:func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)。但我认为你是对的,我需要先尝试空项目。无论如何,看起来 PDF 内容可能会导致此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多