为什么UIWebView无法正确滚动?

时间:2014-12-26 07:37:26

标签: html ios uiwebview uiscrollview

我有一个相当简单的场景,只有一个UIWebView从包中加载一个html文档。 webView填充顶部布局指南下方的屏幕,并使用建议的约束。它有两个奇怪的行为:

  1. 首先将内容向下滚动一下。您可以在下面的第一张图片中看到这一点。粉红色是UIWebView的颜色,而html本身是白色的。

  2. webView的UIScrollView本身有些愚蠢,因为(再次:见图)内容一直滚动到底部,但滚动条不在webView的顶部;它位于内容的顶部。

  3. 内容很容易滚动到那个粉红色区域,当内容一直向上滚动时,滚动条位于UIWebView的底部。见第二张图片。

    我意识到我可以以编程方式设置contentOffset,但它只能在webViewDidFinishLoad函数中运行,然后它会导致可见的跳转,因为webview首先绘制自己然后滚动,所以这没有用。

    这是html(截断空格):

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Untitled Document</title>
    <link href="help.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
    <h2>Frequently-asked questions</h2>
    </body>
    </html>
    

    CSS:

    @charset "UTF-8";
    body {
        font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
        font-size: 16px;
    }
    

    这是ViewController:

    class HelpViewController: UIViewController, UIWebViewDelegate {
    
        @IBOutlet weak var webView: UIWebView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            let navController = self.navigationController
            navController?.navigationBarHidden = false
        }
    
        override func viewWillAppear(animated: Bool) {
            loadURL();
        }
    
        func loadURL() {
            let htmlName = "support";
            let url = NSBundle.mainBundle().URLForResource(htmlName, withExtension: "html")
            self.webView.delegate = self;
            if let goodURL = url {
                let request = NSURLRequest(URL: goodURL)
                self.webView.loadRequest(request)
            }
        }
    }
    

    似乎问题必须与IB中的某些事情有关,但我看不出是什么。有什么好主意吗?

    提前致谢!

    -Dave

    Initial View Scrolled to bottom

1 个答案:

答案 0 :(得分:0)

所以,我认为我已经在某种程度上弄明白了。我在这个场景中有一个导航栏。我将webview的顶部约束设置为顶部布局指南,这是有道理的,因为这是我想要实际的dang webview的顶部。但是,由于某些原因,它似乎不是我的犹太人,因此我将其更改为绑定到超视图的顶部(场景的主视图)。

这样做:我可以在半透明导航栏下看到粉红色调,但webview的实际内容位置正确。

看起来UIWebView的大小应该是整个视图的大小,如果有导航栏,那么它会缩短自己的滚动视图以允许导航栏的大小,无论是否实际需要/证明调整大小。也许我的应用程序正在做的其他事情正在改变这一点,但如果没有,我认为这不是UIWebView的好行为。

-Dave