Pet*_*rbo 18 objective-c uiwebview uiscrollview ios
我想要一个UIWebView内部UIScrollView.UIWebView有时会超出iPhone界限,所以我需要一种滚动视图的方法,这样我就可以看到所有内容(但我不想使用UIWebView的内置滚动).所以我正在考虑将所有内容放在UIScrollView中,然后使UIScrollView的高度等于UIWebView的高度和其中的其他视图.
这是帮助描述我的问题的图像:

joe*_*ern 39
我做了完全相同的事情.这是我如何使它工作:
最后一点有点棘手,因为在UIWebViewDelegate上调用webViewDidFinishLoad:时,无法确定HTML是否完全呈现.
这是获取HTML内容大小的可靠方法:
1.将HTML函数添加到HTML文档准备就绪时调用的HTML:
window.onload = function() {
window.location.href = "ready://" + document.body.offsetHeight;
}
Run Code Online (Sandbox Code Playgroud)
此函数发送一个请求,其内容高度在其URL中.
2.在您的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;
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17578 次 |
| 最近记录: |