Uiwebview在uiscrollview提示

时间:2012-05-09 09:17:12

标签: objective-c xcode cocoa ios5

我有UIScrollview允许分页,内部有详细视图UIWebview。我知道根据Apples Class Reference,你不应该这样做,但我没有看到另一种选择。

为了更好地回应和体验,我禁用了UIWebview的滚动,其中包含:

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

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

这有意义吗?

2 个答案:

答案 0 :(得分:0)

从UIWebView的文档中可以看出:

  

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

更合适的方法是将UIWebView添加到下面带有UIScrollView(或UITableView)的UIViewController。我会意识到你在滚动视图中留下的空间量,特别是如果你正在处理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,仍然可以使用这两个。

请务必缩小网页视图的框架以允许下方的任何单元格可见,否则用户将无法滚动桌面视图,因为任何触摸都会被网页视图拦截。

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

以下是我制作的测试应用的屏幕截图:enter image description here

希望有所帮助:)

答案 1 :(得分:0)

有一种更好的方法可以做到这一点。

从iOS 5.0起,apple公开了UIWebView中的UIScrollView。因此,要根据内容调整webview的大小,这就是你要做的。

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

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

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

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

相关问题