我已经查看了许多与此类似的问题,但尽可能地尝试,我无法以任何方式滚动或互动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中使用以下选项创建的:
视图完全可见。我尝试使它明显小于其父级,并且显示的内容始终停在正确的位置。此视图没有委托或手势识别器。
包含的视图有UITableView
和UILabel
,两者都不与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
方法的底部添加以下行,我会得到一个对话框,其内容与后面的窗口相同它,但我我能够滚动对话框版本。我能想到的唯一区别是对话框是模态的(强制焦点),而我自己的-loadView
和UITableView
窗口仍允许与其背后可见的视图进行交互。
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视图但是不滚动。
答案 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(默认,我相信),那么其边界之外的任何子视图都将可见,但不会接收到触摸。