Objective-c – UIScrollView中的iOS UIWebView

我想在UIScrollView中有一个UIWebView。 UIWebView有时会超出iPhone屏幕的边界,所以我需要一种滚动视图的方法,所以我可以看到所有的内容(但是我不想使用内置的UIWebView滚动)。所以我想把所有的内容放在一个UIScrollView里面,然后使UIScrollView的高度等于UIWebView和其中的其他视图的高度。

这是一个帮助描述我的问题的形象:

最佳答案
我做了同样的事情。这是我如何使它工作:

>将UIWebView添加为UIScrollView的子视图(显然;-)
>禁用UIWebView的本机滚动(您可以通过遍历UIWebView的子视图来执行此操作,直到找到它的UIScrollView并设置scrollEnabled = NO。
>将UIScrollView的contentSize和UIWebView的框架设置为UIWebViews HTML内容的大小。

最后一点是有点棘手,因为当webViewDidFinishLoad:在UIWebViewDelegate上被调用时,您无法确定HTML完全呈现。

以下是获取HTML内容大小的可靠方法:

1.在HTML文档准备就绪时为HTML调用一个javascript函数:

window.onload = function() {
    window.location.href = "ready://" + document.body.offsetHeight;
}

此功能会发送一个请求,该请求在其URL中具有内容高度。

在你的UIWebViewDelegate你拦截这个请求:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
        NSURL *url = [request URL];
        if (navigationType == UIWebViewNavigationTypeOther) {
           if ([[url scheme] isEqualToString:@"ready"]) {
               float contentHeight = [[url host] floatValue];
               yourScrollView.contentSize = CGSizeMake(yourScrollView.frame.size.width, contentHeight + yourWebView.frame.origin.y);
               CGRect fr = yourWebView.frame;
               fr.size = CGSizeMake(yourWebView.frame.size.width, contentHeight);
               yourWebView.frame = fr;

               return NO;       
        }

        return YES;
}

希望有帮助

UPDATE

这是Swift 2版本:

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    guard navigationType == .Other else { return true }
    if let url = request.URL, let host = url.host {
        guard url.scheme == "ready" else { return true }
        if let contentHeight = Float(host) {
            yourScrollView.contentSize = CGSizeMake(yourScrollView.bounds.size.width, CGFloat(contentHeight))
            var fr = webView.frame
            fr.size = CGSizeMake(fr.size.width, CGFloat(contentHeight))
            webView.frame = fr
        }

        return false
    }

    return true
}

转载注明原文:Objective-c – UIScrollView中的iOS UIWebView - 代码日志