UIScrollView中的iOS UIWebView
问题描述:
我想在UIScrollView
中有UIWebView
。 UIWebView有时会超出iPhone屏幕的界限,因此我需要一种滚动视图的方式,以便可以看到所有内容(但我不想使用内置的UIWebView滚动功能)。所以我正在考虑将所有内容放在UIScrollView中,然后让UIScrollView的高度等于UIWebView和其中的其他视图的高度。UIScrollView中的iOS UIWebView
下面是一个图片来帮助说明我的问题:
答
我做同样的事情。以下是我做它的工作:
- 添加一个UIWebView作为的UIScrollView(当然;-)
- 禁用的UIWebView的本土滚动的子视图(你可以做到这一点通过的UIWebView的子视图迭代直到你找到它的UIScrollView并设置scrollEnabled = NO就可以了。
- 设置你的UIScrollView的contentSize和UIWebView中的帧到UIWebViews中的HTML内容的大小。
最后一点是有点棘手,因为你不能确保HTML完全是ren当webViewDidFinishLoad:在UIWebViewDelegate上被调用时被禁止。
这里有一个可靠的方式来获得HTML内容的大小:
1.增加一个JavaScript函数的HTML被调用时的HTML文档已准备就绪:
window.onload = function() {
window.location.href = "ready://" + document.body.offsetHeight;
}
此功能发送请求在其URL中包含内容高度。
2.In您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
这里是斯威夫特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
}
能
人把它翻译成swift? –
@YestayMuratov对不起,延迟回复。我在我的回答 – joern
@joern中添加了一个Swift 2版本,如果HTML内容具有与附加到JS的“显示更多”链接(用于展开或加载和展开文章),那么将无法正常工作,对吧? – OgreSwamp