iOS 9 `-webkit-overflow-scrolling:touch` 和 `overflow: scroll` 破坏了滚动功能

Posted

技术标签:

【中文标题】iOS 9 `-webkit-overflow-scrolling:touch` 和 `overflow: scroll` 破坏了滚动功能【英文标题】:iOS 9 `-webkit-overflow-scrolling:touch` and `overflow: scroll` breaks scrolling capability 【发布时间】:2015-12-30 02:53:24 【问题描述】:

我正在开发一个 web 应用程序,我在 iFrame 中有一个 div,其中包含我想要滚动的隐藏、溢出的内容。

ios 9 上的 Safar 上,当我将 -webkit-overflow-scrolling:touch; 添加到 div 时(已经有 overflow-y: scroll; 以使滚动具有流畅的感觉,它会中断并且根本不滚动。

我知道这是一个已知问题,但我还没有找到与我的场景相关的解决方案:我的 iFrame 不仅仅是传输数据,它们实际上包含用户的内容。方向无关紧要,内容始终需要可滚动。

【问题讨论】:

您是否厌倦了在 body 标记中指定 overflow-y 像这样 body overflow-y: scroll; 这可能会起作用,因为它将应用于整个站点,而不仅仅是单个 div @BrentWhite 不,这不能解决问题 你能解决这个问题吗?发布一个小提琴,以便我可以看到问题。 @BrentWhite 我很难展示小提琴,因为这是一大堆 iframe 【参考方案1】:

我刚刚在一个包含 overflow: auto-webkit-overflow-scrolling: touch 的 div 中遇到了动态内容的问题。

肮脏、丑陋的解决方法:当添加到 dom 时,强制里面的内容大于滚动的 div。像这样的:

<div style="overflow: auto; -webkit-overflow-scrolling: touch;">
    <div style="min-height: 101%">
        dynamic content
    </div>
</div>

我的理论是,当添加 -webkit-overflow-scrolling: touch 时,Safari 会尝试(需要)进行一些重度优化,而这些优化不适用于某些类型的动态内容。

【讨论】:

哇,好脏,好肮脏.. 成功了。谢谢克里斯托弗,我花了 2 个小时改变高度和溢出,直到我看到你的 hack 像魅力一样工作! 这是针对这种情况的完美解决方案。也在这里工作过! 哇!为我工作! 2019 年:我仍然遇到同样的问题。在 Safari 或替代解决方案中解决此问题是否有任何进展?【参考方案2】:

我在 iOS9 上也遇到了 webkit-overflow-scrolling: touch 的这个问题。它可以在设备或 iOS 模拟器上重现。正如 Christopher Camps 所提到的,它只发生在动态内容中,即从比可滚动容器小到比容器大的内容。

Heres a CodePen demonstrating this issue,包括 Christopher Camps 修复。

【讨论】:

【参考方案3】:

这个 Safari 漏洞的另一个技巧似乎是使用 javascript 设置 style="overflow: none" 并立即将其重置为之前的值。

【讨论】:

以上是关于iOS 9 `-webkit-overflow-scrolling:touch` 和 `overflow: scroll` 破坏了滚动功能的主要内容,如果未能解决你的问题,请参考以下文章

iOS 9学习系列:打通 iOS 9 的通用链接(Universal Links)

iOS 8、iOS 9、iOS 10 和 iOS 11 上的 UITabBar 的高度是多少?

问题 XCode 8,Swift 2.3 存档版本在 IOS 9.2.1 -> IOS 9.0 上启动时崩溃

Xcode 9.2 不支持 iOS 11.3 的 Xcode 需要 9.3

Xamarin Studio 5.9.7(内部版本 9)和 Xamarin.iOS 9.0.1.18 中的代码设计错误

python-9- IO模型