0

我有一个UIScrollview允许分页,还有一个UIWebview关于里面的详细视图。我知道根据 Apples Class Reference,您不应该这样做,但我没有看到其他选择。

为了做出更好的响应和体验,我禁用了UIWebview, 的滚动:

[[[webView subviews] lastObject] setScrollEnabled:FALSE];

但现在我正在寻找一种解决方案,使 webview 的大小合适,具体取决于内容。有没有一种简单的方法可以做到这一点,其中 webview 的宽度保持不变,但是当需要显示完整文章时高度会(自动)增长?这将消除滚动问题,因为它位于滚动视图,他将负责此场景中的所有滚动。

那有意义吗?

4

2 回答 2

0

从 UIWebView 的文档中,它指出:

重要提示:您不应该在 UIScrollView 对象中嵌入 UIWebView 或 UITableView 对象。如果这样做,可能会导致意外行为,因为两个对象的触摸事件可能会混淆并错误处理。

更合适的方法是将您的 UIWebView 添加到 UIViewController 中,并在其下方添加一个 UIScrollView(或 UITableView)。我会意识到您将为滚动视图留下的空间量,特别是如果您正在处理 iPhone。

希望这是朝着正确方向的推动。

更新:

在研究了这个(我确信会有办法)之后,似乎我设法想出的最好方法是将你的 UIWebView 添加到 UITableView 的标题视图中。

    //create webview
    _webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 280.0)];

    //load request and scale content to fit
    [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.stackoverflow.com/"]]];
    [_webView setScalesPageToFit:YES];

    //add web view to table header view
    [[self tableView] setTableHeaderView:_webview];

这会在单元格显示在下面之前将 UIWebView 添加到表格视图的标题中。请注意,表格标题视图(以及页脚视图)与节标题(和页脚)不同,因此如果您使用 UITableViewStylePlain,您仍然可以使用这两个视图。

确保衰减 webview 的框架以允许下面的任何单元格可见,否则用户将无法滚动 tableview,因为任何触摸都将被 webview 拦截。

这仍然违反 UIWebView 文档(如上所述),但实际上,只要 webview 不覆盖视图的整个可滚动区域,此实现实际上就可以正常工作。

这是我制作的测试应用程序的屏幕截图:在此处输入图像描述

希望有帮助:)

于 2012-05-09T09:23:30.997 回答
0

有更好的方法来做到这一点。

从 iOS 5.0 开始,苹果公开了 UIWebView 中的 UIScrollView。所以要根据内容调整 webview 的大小,这就是你要做的。

  1. 使 UIWebView 的父级成为该 UIWebView 的委托。
  2. 实现 webViewDidFinishLoad: 并在该函数中执行此操作。

    CGSize sz = [webView.scrollView contentSize]; CGRect 矩形 = webView.frame; rect.size.height = sz.height; webView.frame = 矩形;

即使有多个加载开始和结束,也没关系,因为最终我们将调整 web 视图的大小以适应内容。

如果您不希望用户看到动态调整大小,您可以将 webview 的 alpha 设置为 0,当所有内容加载并完成调整大小时,您可以使用动画将其转换为 alpha 1。

于 2013-04-12T05:37:18.663 回答