【问题标题】:Disable horizontal scrolling for WKWebView禁用 WKWebView 的水平滚动
【发布时间】:2021-07-05 02:31:00
【问题描述】:

我知道如何为 UIWebView 执行此操作,但它已被弃用。我已经想出了如何隐藏垂直和水平滚动指示器,禁用滚动视图反弹和禁用捏合手势识别器,但仍然没有找到一种方法来完全禁用 webview 中的水平滚动。任何帮助将不胜感激,下面是我的 WebView.Swift。

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

【问题讨论】:

    标签: swiftui scrollview wkwebview swift5


    【解决方案1】:

    为此,您可以使用CoordinatorThere is good explanation for their.
    在 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)
        }
     }
    

    And now, horizontal scroll not work!
    所有代码

    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
    }
    

    【讨论】:

    • 感谢您的快速回复和详细解释,它就像一个魅力
    • 完成,抱歉我对堆栈溢出很陌生
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2014-05-11
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多