gpt4 book ai didi

objective-c - UIScrollView 中的 iOS UIWebView

转载 作者:IT王子 更新时间:2023-10-29 08:10:38 26 4
gpt4 key购买 nike

我想在 UIScrollView 中有一个 UIWebView。 UIWebView 有时会超出 iPhone 屏幕的范围,因此我需要一种 ScrollView 的方法,以便我可以看到所有内容(但我不想使用 UIWebView 的内置滚动)。所以我正在考虑将所有内容放在 UIScrollView 中,然后使 UIScrollView 的高度等于 UIWebView 和其中的其他 View 的高度。

这是一张有助于描述我的问题的图片:

Interface Builder Image

最佳答案

我也做了同样的事情。这是我如何让它工作的:

  1. 将 UIWebView 添加为 UIScrollView 的 subview (显然 ;-)
  2. 禁用 UIWebView 的 native 滚动(您可以通过遍历 UIWebView 的 subview 直到找到它是 UIScrollView 并在其上设置 scrollEnabled = NO 来做到这一点。
  3. 将 UIScrollView 的 contentSize 和 UIWebView 的框架设置为 UIWebViews HTML 内容的大小。

最后一点有点棘手,因为在 UIWebViewDelegate 上调用 webViewDidFinishLoad: 时,您无法确定 HTML 是否已完全呈现。

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

1.在 HTML 文档准备好时调用的 HTML 添加一个 javascript 函数:

window.onload = function() {
window.location.href = "ready://" + document.body.offsetHeight;
}

此函数发送一个在其 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;
}

希望对你有帮助

更新

这是 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
}

关于objective-c - UIScrollView 中的 iOS UIWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6440448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com