【问题标题】:determine if a UIWebView requires scrolling确定 UIWebView 是否需要滚动
【发布时间】:2011-03-29 15:39:49
【问题描述】:

这是对先前问题的更新。一旦我用一些基于字符串的 HTML 内容加载 UIWebView,有没有办法确定视图是否需要滚动才能看到全部内容?我正在寻找某种标志或方式来了解内容是否低于 UIWebView 的底部。

提前致谢!

【问题讨论】:

    标签: iphone ipad uiwebview


    【解决方案1】:

    您可以继承 UIWebView 并使用以下初始化器:

    -(id) initWithCoder:(NSCoder *)aDecoder
    {
        if(self = [super initWithCoder:aDecoder])
        {
            for (UIView* v in self.subviews){
                if ([v isKindOfClass:[UIScrollView class]]){
                    self.scrollview = (UIScrollView*)v; 
                    break;
                }
            }
        }
        return self;
    }
    
    - (id) initWithFrame:(CGRect)frame{
        if(self = [super initWithFrame:frame])
        {
            for (UIView* v in self.subviews){
                if ([v isKindOfClass:[UIScrollView class]]){
                    self.scrollview = (UIScrollView*)v; 
                    break;
                }
            }
        }
        return self;
    }
    

    然后有一个名为

    的属性
    @property (nonatomic, retain) UIScrollView *scrollview;
    

    然后您可以访问 UIWebView 中的滚动视图,并可以检查其内容大小以查看它是否大于您的视图大小

    【讨论】:

    • 这有点工作,好主意。我做了这样的检查:(w是我的子类webview)[w loadHTMLString:content baseURL:url]; [scrollIssue addSubview:w]; CGRect 矩形 = w.frame; UIScrollView *sv = [w 滚动视图]; CGSize rectv = sv.contentSize;即使需要滚动,它们也总是相同的。怀疑它没有画,有没有办法在检查之前强制它布局?
    • 可以尝试调用 webview 上的 layoutSubviews 吗?
    【解决方案2】:

    最简单的方法大概是用Javascript来获取文档高度:

    NSInteger 高度 = [[myWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] intValue];

    (还没有实际测试过这个,所以 YMMV。不同的浏览器将文档高度放在不同的对象和属性中,我不记得哪个在 Webkit 中工作......见How to get height of entire document with JavaScript?

    如果返回的高度大于 UIWebView 的高度,则需要滚动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多