禁用WKWebView的水平滚动



我知道如何为UIWebView做到这一点,但它已被弃用。我已经找到了如何隐藏垂直和水平滚动指示器,禁用滚动视图反弹和禁用捏手势识别器,但仍然没有找到在网络视图中完全禁用水平滚动的方法。如果有任何帮助,我们将不胜感激,下面是我的WebView。敏捷的

struct WebView: UIViewRepresentable
{
let request: URLRequest
var webView: WKWebView?

init (request: URLRequest)
{
self.webView = WKWebView()
self.request = request
webView?.scrollView.showsHorizontalScrollIndicator = false
webView?.scrollView.showsVerticalScrollIndicator = false

webView?.scrollView.pinchGestureRecognizer?.isEnabled = false
webView?.scrollView.bounces = false
}

func makeUIView(context: Context) -> WKWebView {
return webView!
}

func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.load(request)
}

func goBack()
{
webView?.goBack()
}

func refresh()
{
webView?.reload()
}

func goHome()
{
webView?.load(request)
}
}

为此,您可以使用Coordinator。有很好的解释
在UIViewRepresentable中创建类Coordinator。将UIScrollViewDelegate添加到类中。在makeUIView中,设置webView?.scrollView.delegate = context.coordinator
在Coordinator中,您需要此功能。

func scrollViewDidScroll(_ scrollView: UIScrollView) {
if (scrollView.contentOffset.x > 0){
scrollView.contentOffset = CGPoint(x: 0, y: scrollView.contentOffset.y)
}
}

现在,水平滚动不起作用
所有代码

import WebKit
struct WebView: UIViewRepresentable {
let request: URLRequest
var webView: WKWebView?

class Coordinator: NSObject, UIScrollViewDelegate {
var parent: WebView

init(_ parent: WebView) {
self.parent = parent
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
if (scrollView.contentOffset.x > 0){
scrollView.contentOffset = CGPoint(x: 0, y: scrollView.contentOffset.y)
}
}
}

func makeCoordinator() -> Coordinator {
Coordinator(self)
}

init (request: URLRequest) {
self.webView = WKWebView()
self.request = request
webView?.scrollView.showsHorizontalScrollIndicator = false
webView?.scrollView.showsVerticalScrollIndicator = false

webView?.scrollView.pinchGestureRecognizer?.isEnabled = false
webView?.scrollView.bounces = false
}

func makeUIView(context: Context) -> WKWebView {
webView?.scrollView.delegate = context.coordinator
return webView!
}

func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.load(request)
}

// You funcs
}

最新更新