iOS 10 中的新交互行为

去年我们发布了一篇关于在 iOS 上实现更灵敏的轻触的博客文章。随着 iOS 10 的发布,我们对快速轻触的行为进行了一些细微调整,并对一种非常常见的用户交互——双指缩放——进行了重要更改。

快速轻触

iOS 9 及更早版本的一个常见抱怨是,用户轻触屏幕触发的事件会略有延迟。这是因为浏览器在等待,看手势是否是双击,这表示用户想要缩放。一旦小延迟过去而没有看到第二次轻触,浏览器就会知道这是一次单次轻触并分派事件。这使得一些设计用于即时反应的页面感觉略微缓慢。

正如我们在我们的介绍性文章中描述的,iOS 10 检测页面何时可以支持更快的轻触,并立即分派事件,使网站感觉响应速度大大提高。反馈一直非常积极。然而,在 iOS 10 发布之前,我们对原始文章中描述的方法进行了一些调整。以下是目前的详细信息。

在 iOS 10 上启用快速轻触需要页面具备以下条件

  1. 必须存在 viewport 类型的 meta 标签
  2. viewport 必须定义为 width=device-width
  3. 内容必须处于 1 的比例,这意味着两者兼具
    a. 用户未手动从 1 的比例缩放(例如,他们可能已经缩放过,但必须返回到原始比例)
    b. 页面内容没有宽到浏览器被迫缩小以适应

注意:解释 3.b,WebKit 经常看到页面定义了 width=device-width,但随后明确地将内容布局为非常大的宽度,通常大于 1000px。这些站点通常是为大屏幕设计的,并添加了 viewport 标签,希望它能使其成为移动友好型设计。不幸的是,情况并非如此。如果浏览器遵守了这样误导性的 viewport 规则,用户将只能看到内容的左上角——这显然是一种糟糕的体验。相反,WebKit 会寻找这种情况并适当地调整缩放因子。从概念上讲,这种行为与浏览器加载页面,然后用户双指缩放足够远以查看所有内容相同,这意味着页面不再处于 1 的比例。

随处缩放

iOS 10 上的 Safari 允许用户在每个页面上双指缩放。作为开发者,您应该意识到这一点,并确保您的内容在缩放时也能良好运行。

发生了什么变化?在 iOS 10 之前,Safari 允许内容通过在 viewport 中设置 user-scalable=no 或适当的 min-scalemax-scale 值来阻止用户在页面上缩放。这不幸地导致页面可以选择一个不可读的文本大小,同时又不给用户任何缩放的方式。此外,现在有如此广泛的设备,具有不同的显示尺寸、屏幕分辨率、像素密度……在设计中选择合适的文本大小变得非常困难。

现在,我们忽略 user-scalablemin-scalemax-scale 设置。如果您有禁用缩放的内容,请在 iOS 10 上测试它,并理解许多用户现在将进行缩放。

作为用户,我们都遇到过内容太小而无法舒适阅读的情况。我们知道,很多人都赞赏这项缩放改进,尽管这可能意味着一些尝试阻止缩放的网站在更新之前会受到影响。

WKWebView 内容中的缩放

您可能有一个混合了 WKWebView 和原生内容的应用程序,并且用户能够仅缩放该内容可能不合适。在这些情况下,您可以通过设置 WKWebViewConfiguration 上的新属性来防止用户缩放

WKWebViewConfiguration 上有一个新 API

var ignoresViewportScaleLimits: Bool

默认值为 false,这意味着 WKWebView 内容将允许内容阻止缩放。这保留了与旧版 iOS 的行为一致性。

同时,Safari 和 SafariViewController 将值设置为 true。如果您的应用程序以类似方式使用 WKWebView,例如显示大量文本,我们鼓励您也将其值更改为 true

如需反馈,请发送电子邮件至 web-evangelist@apple.com 或在 Twitter 上@ @webkit