首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UIScrollView中的iOS UIWebView

UIScrollView中的iOS UIWebView
EN

Stack Overflow用户
提问于 2011-06-22 21:13:22
回答 1查看 18.4K关注 0票数 18

我想在UIScrollView中有一个UIWebView。UIWebView有时会超出iPhone屏幕的范围,所以我需要一种滚动视图的方式,这样我才能看到所有内容(但我不想使用UIWebView的内置滚动功能)。因此,我在考虑将所有内容放在UIScrollView中,然后使UIScrollView的高度等于UIWebView和其中包含的其他视图的高度。

下面是一张帮助描述我的问题的图片:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-24 15:46:15

我也做了同样的事情。下面是我是如何工作的:

  1. 将UIWebView添加为UIScrollView的子视图(显然;-)
  2. 禁用UIWebView的本机滚动(您可以通过迭代UIWebView的子视图直到找到它的UIScrollView并在其上设置scrollEnabled = NO来执行此操作。
  3. 将您的contentSize和UIWebView的框架设置为UIWebViews网页内容的大小。

最后一点有点棘手,因为当在UIWebViewDelegate上调用webViewDidFinishLoad:时,您不能确保完全呈现HTML.

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

1.向HTML添加一个javascript函数,该函数在HTML文档就绪时调用:

代码语言:javascript
复制
window.onload = function() {
    window.location.href = "ready://" + document.body.offsetHeight;
}

此函数发送一个请求,该请求的URL中包含内容高度。

2.在您的UIWebViewDelegate中拦截此请求:

代码语言:javascript
复制
- (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;
}

希望这能有所帮助

更新

以下是Swift 2的版本:

代码语言:javascript
复制
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
}
票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6440448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档