【问题标题】:Why does scrolling a UIWebView *feel* so much different than scrolling any other UIScrollView?为什么滚动 UIWebView *感觉*与滚动任何其他 UIScrollView 有很大不同?
【发布时间】:2013-01-23 16:03:28
【问题描述】:

我正在构建一个应用程序,它将少量 的简单 HTML(本地)加载到单个全屏 UIWebView 中。我注意到滚动此 Web 视图感觉与滚动任何其他 UIScrollView 明显不同。本质上,这似乎不是性能或响应能力问题......这只是当您上下拖动和轻弹 Web 视图时动力如何发挥作用的问题。它只是感觉不是很“原生”(因为没有更好的词)。这就像滚动糖蜜或布丁……有点“粘”,而不是您想要的那种“光滑”。

有人知道这是什么原因吗?有什么办法可以修复它,或者至少让滚动 UIWebView 感觉更“原生”?

【问题讨论】:

  • 您显示的是哪种 HTML?也许有一种方法可以使用原生控件完成所有事情。
  • @JackLawrence - HTML 实际上是用户生成的,定期从服务器中提取,并存储在核心数据中。理论上我可以使用原生控件来实现视图,但它不如直接显示用户生成的数据灵活。

标签: ios cocoa-touch uiwebview uiscrollview


【解决方案1】:

我也有同样的看法。一定和webView的scrollView减速率有关。刚刚运行了这个测试,1) 它证实了我们的怀疑,2) 提出了修复建议。

我在 UI 中添加了一个 scrollView 和一个 webView,然后记录了以下内容:

NSLog(@"my scroll view's decel rate is %f", self.scrollView.decelerationRate);
NSLog(@"my web view's decel rate is %f", self.webView.scrollView.decelerationRate);
NSLog(@"normal is %f, fast is %f", UIScrollViewDecelerationRateNormal, UIScrollViewDecelerationRateFast);

输出证实了关于 webView 更摩擦的猜测:

my scroll view's decel rate is 0.998000
my web view's decel rate is 0.989324
normal is 0.998000, fast is 0.990000

并提出修复建议:

self.webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;

【讨论】:

  • 丝般顺滑。刚刚好。谢谢!
  • 值得注意的是,这样做是因为 Web 视图的渲染成本比大多数其他视图高得多。通过确保用户滚动时要绘制的新区域更少,使滚动“更硬”有助于隐藏这一点。这并不是说如果您知道某个特定的 Web 视图可以处理它,就不应更改它,但请记住,它正在出于某种原因而进行,您应该确保它不是问题你的用例。
  • 这太棒了!我希望它适用于我的项目。谢谢。
  • @BrentRoyal-Gordon 我只是偶然发现了这个问题,我想知道:如果normal 滚动减速率是0.998000fast0.990000 低于normal ,那么0.989324webview 值不应该比fast 更低,而不是更慢吗?也就是说,网络视图的渲染成本更高,我预计减速率的值大于0.998000,而不是更低。我错过了什么吗?
  • 减速是一个模棱两可的术语。如果您将其视为负加速度的幅度,则更有意义。可能应用为 v' = v(1-r)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多