为什么UIWebView不滚动?

时间:2014-04-19 02:11:56

标签: ios ipad uiwebview

我已经查看了许多与此类似的问题,但尽可能地尝试,我无法以任何方式滚动或互动UIWebView。这是代码:

- (void)loadView {
    [super loadView];

    ...

    [self.displayView loadHTMLString:entry->infoHtml baseURL:nil];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.displayView.userInteractionEnabled = YES;
    self.displayView.scrollView.showsVerticalScrollIndicator = YES;
    self.displayView.scrollView.scrollEnabled = YES;
    [self.displayView.scrollView flashScrollIndicators];
}

显示视图,显示所有正确的内容,并显示垂直滚动条一秒钟,正确显示当前显示的内容部分。

但是我无法滚动它。触摸内容并移动我的手指什么也没做。与同一父母下的非重叠UITableView进行交互可以正常工作;触摸那里的条目会更新UIWebView的内容,因为它已被编程完成。

UIWebView是在Storyboard中使用以下选项创建的:

  • 缩放页面以适合:取消选中(如果选中,则无法捏合缩放)
  • 分页: uncaginated
  • 模式: Aspect Fit (尝试了几个;所有不可滚动的)
  • UserInteractionEnabled:已选中(父视图也已选中)

视图完全可见。我尝试使它明显小于其父级,并且显示的内容始终停在正确的位置。此视图没有委托或手势识别器。

包含的视图有UITableViewUILabel,两者都不与UIWebView的区域重叠。我已尝试在故事板上更改场景中视图的顺序,但这也没有区别。

我尝试从UIBuilder中删除视图并以编程方式创建它:

self.displayView = [[UIWebView alloc] initWithFrame:CGRectMake(400, 220, 400, 300)];
[self.view addSubview:self.displayView];

相同的结果。我尝试从场景中删除所有其他元素,除了这个以编程方式创建的UIWebView。结果仍然相同。

在我的代码的其他地方,我已将UIWebView作为@"accessoryView"的{​​{1}},我可以按预期滚动内容。

是否还需要做其他事情来滚动UIWebView子视图?

2014-04-20:事实上,如果我在UIAlertView方法的底部添加以下行,我会得到一个对话框,其内容与后面的窗口相同它,但我能够滚动对话框版本。我能想到的唯一区别是对话框是模态的(强制焦点),而我自己的-loadViewUITableView窗口仍允许与其背后可见的视图进行交互。

UIWebView

另一方面,如果我用UIWebView* contents = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 250, 250)]; [contents loadHTMLString:entry->infoHtml baseURL:nil]; [alertView setValue:contents forKey:@"accessoryView"]; [alertView show]; 替换的最后两行,那么我会在屏幕的左上角获得相同的第二个HTML视图但是滚动。

2 个答案:

答案 0 :(得分:1)

我已经解决了。首先,我尝试将其添加到我的MainController类中的-viewDidLoad

UIWebView* contents = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 250, 250)];
[contents loadHTMLString:@"<html><head><title>FOO</title></head><body><p>A</p><p>B</p><p>C</p><p>D</p><p>E</p><p>F</p><p>G</p><p>H</p><p>I</p><p>J</p><p>K</p><p>L</p><p>M</p><p>N</p><p>O</p><p>P</p><p>Q</p><p>R</p><p>S</p><p>T</p><p>U</p><p>V</p><p>W</p><p>X</p><p>Y</p><p>Z</p></body></html>" baseURL:nil];
contents.backgroundColor = [UIColor redColor];
[self.view addSubview:contents];

显示但不可滚动。我有一个StartupController处理初始化应用程序并先运行,所以我在那里添加了相同的代码。 这是可滚动的!啊哈!

我突然发现,覆盖MainView的顶级Google地图(GMSMapView)可能会吞噬滚动事件,但会传递点击事件。在场景中,我创建了一个顶级的普通/简单/空UIView,而不仅仅是一个地图视图,并使GMSMapView成为一个全尺寸的孩子。现在,当我将我的观点添加到新的顶级(简单)视图时,他们是兄弟姐妹,而不是地图的孩子,并正确地获取所有事件。

因此,我的UIWebView现在可以滚动了。感谢大家的意见和建议!经过几个月的尝试和尝试不同的事情才能最终解决这个问题。

答案 1 :(得分:0)

请检查Web视图是否完全包含在其父视图的边界内(依此类推)在视图层次结构中。一种简单的方法是设置一些背景颜色。可能你有一些不符合预期的约束。

同样,所有父视图都启用了用户交互。

修改:我了解网络视图完全可见。但这并不意味着它包含在其超级视图的范围内。如果superview有clipsToBounds = NO(默认,我相信),那么其边界之外的任何子视图都将可见,但不会接收到触摸。