11

问题

有谁知道避免在 iOS 上的滚动视图中使用 Web 视图的技术原因(假设您愿意自己禁用在 Web 视图中的滚动)?

如果您查看UIWebView 的 Apple 文档,他们会说:

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

我受过教育的猜测

看起来他们可能会警告您不要将滚动视图放在另一个滚动视图中,因为内部滚动视图和外部滚动视图之间的触摸可能会混淆。

但是,有一个非常正当的理由要UIWebView在滚动视图中放置一个。Web 视图不仅仅是滚动视图。UIWebView可以轻松显示范围广泛的网页内容。

如果不需要允许在自身内滚动,并且UIWebView您使用以下任一方法关闭滚动:

webView.userInteractionEnabled = NO;

或者

webView.scrollView.scrollEnabled = NO;

那么这个设计真的有问题吗?

我想知道这是否部分是原始UIWebView界面的工件,它没有让您直接(和记录)访问其嵌入式UIScrollView(以便能够轻松禁用其滚动)。也许 Apple 文档中的这个声明是它的遗产?

项目背景

我问是因为我正在维护一个应用程序(由其他人编写),该应用程序在滚动视图中使用少数 Web 视图,允许在它们之间水平滚动。Web 内容必须被认为是固定的(不可更改),并且每个 HTML 页面只显示一页内容。用户需要能够在页面之间滚动,因此为此选择了多个UIWebViews内部UIScrollView。到目前为止,它似乎可以正常工作。

但是,页面显示全屏图像,并且滚动性能是一个问题。但是,我正在尝试确定滚动视图中 Web 视图的基本嵌套(Apple 警告不要这样做)是否真的是问题的一部分。

4

2 回答 2

20

苹果不建议将您解释的内容放入其中的唯一原因:因为滚动可能会在两个滚动视图之间混淆UIWebViewsUIScrollViews

我猜他们写这个是因为,由于UIWebView继承UIView而不是UIScrollView,因此它本身不是滚动视图(但嵌入了滚动视图),这对于没有经验的用户来说可能并不明显,因为 Web 内容可以根据 HTML 滚动,其中如果有的话,会弄乱容器滚动视图。所以这可能只是对这个案例的提醒。

但是如果你禁用滚动,我看不出有什么原因会出错。

请注意,在滚动视图上禁用用户交互与禁用滚动不同。如果您的 HTML 内容包含链接或其他可点击/可点击的内容,禁用用户交互也会禁用它们。要仅禁用滚动但保持用户交互(如简单的点击),请使用webview.scrollView.scrollEnabled = NO而不是webview.scrollView.userInteractionEnabled = NO.

于 2012-10-13T01:12:10.917 回答
1

我遇到了至少一个其他原因:

UIWebView 在滚动时似乎运行任何 JavaScript。我的 JavaScript 动画内容在 Web 视图滚动时被冻结,并在滚动结束后继续从中断处继续。

想必,这是一个性能优化。现在,当我们滚动包含 Web 视图的滚动视图时,Web 视图不会意识到它们正在移动,因此不会暂停它们的 JavaScript。

当然,问题是这是否会显着影响性能,以及在哪些 iPad 型号上。

于 2013-02-28T09:55:40.927 回答