【问题标题】:How to disable horizontal scrolling in webView with swift?如何快速禁用 webView 中的水平滚动?
【发布时间】:2015-02-15 14:39:51
【问题描述】:

我有一个简单的webView 喜欢:

@IBOutlet weak var webView: UIWebView!
override func viewDidLoad() {
    super.viewDidLoad()

    let url = "https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-XID_456"
    let requestURL = NSURL(string:url)
    let request = NSURLRequest(URL: requestURL!)
    webView.loadRequest(request)

当我将此请求加载到 webView 时,它加载得非常好,但是当它完全加载时,当我从左侧和右侧滚动它时,它像这样水平滚动:

我不想以这种方式滚动它,我只希望它垂直滚动有什么方法可以在 swift 中快速执行我在 Internet 上搜索,但只找到了 Objective-c 的解决方案,我在 swift 中尝试但没有工作。

请为此提供任何解决方案。

【问题讨论】:

    标签: swift uiwebview horizontal-scrolling


    【解决方案1】:

    更新 Swift 4

    将这两个方法添加到您的 UIViewController 中:

        func webViewDidFinishLoad(_ webView: UIWebView) {
        self.webView.scrollView.showsHorizontalScrollIndicator = false
    }
    
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if (scrollView.contentOffset.x > 0){
            scrollView.contentOffset = CGPoint(x: 0, y: scrollView.contentOffset.y)
        }
     }
    

    在 viewDidLoad 方法中添加以下几行:

     webview.scrollView.delegate = self
     webview.scrollView.showsHorizontalScrollIndicator = false
    

    现在这个 wld 在webview.scrollView.delegate = self 行显示一个错误,所以请确保像这样添加 UIScrollViewDelegate

    class DetailViewController: UIViewController, UIWebViewDelegate, UIScrollViewDelegate{
    

    水平滚动已停止:)

    【讨论】:

    • 感谢您的回答,但它对我不起作用,您是否与 URL 核对过我已经提出问题?
    • 您找到解决方案了吗?它对我也不起作用
    【解决方案2】:

    很抱歉这么晚才回答,但是您可以通过实现 UIWebViewDelegate 方法在数据加载完成后将可滚动大小设置为 WebView 滚动视图来做到这一点。

    func webViewDidFinishLoad(_ webView: UIWebView)

    你可以这样做:

    SWIFT 4:

    func webViewDidFinishLoad(_ webView: UIWebView) {
        let scrollableSize = CGSize(width: view.frame.size.width, height: webView.scrollView.contentSize.height)
        self.webView?.scrollView.contentSize = scrollableSize
    }
    

    编辑:

    这里的关键是将 webView scrollView 宽度设置为您的主视图宽度,这将防止水平滚动。

    PS:别忘了采用 UIWebViewDelegate 协议

    class myViewController: UIViewController,UIWebViewDelegate
    

    并在 viewDidLoad 中设置您的 webView 委托

    webView?.delegate = self
    

    【讨论】:

      【解决方案3】:

      如果你来这里是想找一种方法让它像我一样完全不滚动(水平或垂直),这里有一个适用于 Swift 5 中 WKWebView 的答案:

      webView.scrollView.isScrollEnabled = false
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-15
        • 2019-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        相关资源
        最近更新 更多