【问题标题】:UIWebView loading progress and adjust web page to fit the view page?UIWebView 加载进度并调整网页以适应视图页面?
【发布时间】:2011-02-03 09:08:05
【问题描述】:

我正在使用 UIWebView 加载网页。

有3个问题:

1.UIWebView在加载页面时可以跟踪百分比进度吗?

2.我注意到,当 Safari 加载网页时,URL 文本字段会显示一个蓝色背景进度指示器,告诉用户加载网页的百分比。这是什么技术?

3.我知道有属性 scalesPageToFit

scalesPageToFit 一个布尔值,用于确定网页是否缩放以适应视图并且用户可以更改比例。

我尝试将其设置为 YES,但它似乎不在公共 API 中,并且我的应用因黑屏而停止,我不确定是什么问题?

【问题讨论】:

    标签: iphone uiwebview


    【解决方案1】:

    回答#1)

    您可以使用 NSURLConnection 将网页作为 NSData 对象下拉,而不是使用 UIWebView。当您收到来自

    的请求的初始响应时
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    

    网络服务器应返回“预期内容大小”的值(应包含在响应中)。然后每次接收数据时都会不断调用以下方法:

     - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    

    继续将数据附加到现有的 NSMutableData 对象。然后您可以对照预期的响应大小检查当前数据对象 (NSMutableData.length) 的大小。

    percentage = (myData.length*100)/theResponse.expectedContentSize;
    

    然后您可以使用该百分比更新进度条!当

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    

    运行,用你的数据调用

    [myWebView loadData:myData MIMEType:myMimeType textEncodingName:myEncoding baseURL:baseURL];
    

    它会将您下拉的所有内容加载到您的网络视图中。

    【讨论】:

    • 请注意,此方法不会告诉您何时加载“整个”页面,只告诉您第一个“index.html”文件有。但是这个“index.html”页面很可能包含图像、脚本和其他需要加载的资源,然后才能真正将网页视为“已加载”。但真正做到正确意味着您自己解析 HTML。
    • 其实整个问题已经在这里讨论过了:stackoverflow.com/questions/1900151/…,还有一个私有API解决方案。
    【解决方案2】:

    关于#3:

    您可以尝试在包含您的 webview 的 UIView 的 viewDidLoad 事件中将 scalePagesToFit 指定为 YES,例如:

    - (void)viewDidLoad {
        self.webView.scalesPageToFit = YES;
        //other code here...
    }
    

    对于这不起作用的情况,请参阅以下 StackOverflow 问题:UIWebView does not scale content to fit 其中提问者(以及随后的回答者)给出了此解决方案。

    显然您可以使用 javascript 来调整页面大小以适应浏览器:

    NSString *jsCommand = [NSString stringWithFormat:@"document.body.style.zoom = 1.5;"];
    [webLookupView stringByEvaluatingJavaScriptFromString:jsCommand];
    

    【讨论】:

      【解决方案3】:

      您可以尝试使用 UIWebView 的这个子类,它使用私有 UIWebView 方法 - 因此,这个解决方案不是 100% AppStore 安全的(尽管有些应用程序几乎 100% 使用它:Facebook、Google 应用程序......)。

      https://github.com/petr-inmite/imtwebview

      【讨论】:

      • 作者说它不是 %100 AppStore 安全的,所以我们不要使用它!
      • 尽管它不是 100% App Store 安全的,但它可以用于 Cydia 发布。
      【解决方案4】:

      Re #2:我相信 Safari 在 UITextField 上使用了一个私有 API 调用(所以如果你想提交到应用商店,你不能这样做),但你应该能够通过放置一个 textfield 来自己实现这一点进度条顶部没有边框。

      【讨论】:

        【解决方案5】:

        要回答问题 #1,有一个解决方案是 App Store 安全的,并且使用与 Webkit 类似的方法来跟踪进度。

        https://github.com/otium/OTMWebView

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-24
          • 1970-01-01
          • 2012-01-08
          • 2023-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多