有没有人知道在iOS上滚动视图中避免网页浏览的技术原因(假设您愿意在网页视图中自动停止滚动)?
如果你看at the Apple docs for UIWebView,他们会说:
重要提示:您不应该嵌入UIWebView或UITableView对象 UIScrollView对象。如果这样做,可能会导致意外行为 因为两个对象的触摸事件可能混淆错误 处理。
看起来他们可能会警告你不要在另一个滚动视图中放置滚动视图,因为内部和外部滚动视图之间的触摸可能会混淆。
但是,有一个非常合理的理由想要在滚动视图中放置UIWebView
。 Web视图不是只是滚动视图。 UIWebView
可以轻松展示各种网络内容。
如果不需要允许在UIWebView
本身内滚动,则可以使用以下任一方式滚动滚动:
webView.userInteractionEnabled = NO;
或
webView.scrollView.scrollEnabled = NO;
那么这个设计真的有问题吗?
我想知道这是否部分是原始UIWebView
界面的工件,它没有将direct (and documented) access提供给其嵌入式UIScrollView
(以便能够禁用其滚动容易)。也许Apple文档中的这个陈述是遗产吗?
我问,因为我正在维护一个应用程序(由其他人编写),它在滚动视图中使用少量Web视图,允许在它们之间水平滚动。 Web内容必须被视为已修复(不可更改),并且每个HTML页面仅显示一页内容。用户需要能够在页面之间滚动,因此选择了UIWebViews
内的多个UIScrollView
。到目前为止,似乎可能正常工作。
然而,页面显示全屏图像,滚动性能是一个问题。但是,我正在尝试确定滚动视图中的Web视图的基本嵌套(Apple警告说)是否真的是问题的一部分。
答案 0 :(得分:19)
如果对于您解释的那个,Apple不建议将UIWebViews
置于UIScrollViews
内,这是唯一的原因:因为滚动可能会在两个滚动视图之间混淆。
我猜他们写这个是因为UIWebView
继承了UIView
而不是UIScrollView
,因此不是滚动视图本身(但是嵌入了一个),这可能不是对于未经实验的用户来说显而易见的是,Web内容可以根据HTML进行滚动,如果有的话,这会弄乱容器滚动视图。所以这可能只是提醒这个案例。
但是如果你禁用滚动,我看不出有什么理由会出错。
请注意,在滚动视图上禁用用户交互与禁用滚动不同。如果您的HTML内容包含链接或其他可点击/可点击的内容,则禁用用户交互也会禁用它们。要仅停用滚动但仅保持用户互动(如简单点按),请使用webview.scrollView.scrollEnabled = NO
代替webview.scrollView.userInteractionEnabled = NO
。
答案 1 :(得分:1)
我至少遇到过另一个原因:
UIWebViews出现而非以在滚动时运行任何JavaScript。我的JavaScript动画内容在Web视图滚动时被冻结,并在滚动结束后继续停止。
据推测,这是一次性能优化。现在,当我们滚动包含Web视图的滚动视图时,Web视图不知道它们正在移动,因此不会暂停它们的JavaScript。
当然,问题在于它是否会以显着的方式影响性能,以及iPad型号。