OS X WebView 滚动条 redrawing/flickering/flashing 问题

OS X WebView scrollbar redrawing/flickering/flashing issue

我在 OS X Yosemite 上遇到 WebView 滚动条的问题。 WebView 在 XIB 文件中设置,保留默认设置。然后加载内容:

[self.webView.mainFrame loadHTMLString:html baseURL:nil];

但是在滚动时我看到 redrawing/flickering/flashing 滚动条问题:example video。 (这种情况发生在各种内容上,我只是用这个随机数据记录的)

这个很难弄清楚,但它是这样的:首先创建了一个只有 WebView 的新项目,看看我是否可以重现它。我无法在那里重现它。

我切换回我的项目并将麻烦的 xib 替换为一个只包含 WebView 的新项目。我再次无法重现该问题。

接下来是更耗时的任务,即在新的 xib 中重新创建完整的 UI。此 xib 也无法重现该问题。问题解决了!

但是是什么触发了这个问题?盯着两个 xib 的 diff 看了一会儿,我发现了一些东西:

<customView alphaValue="0.99999999999999989" translatesAutoresizingMaskIntoConstraints="NO" id="eEn-AF-z0I">

Interface Builder 仍然在 Appearance 部分显示 Alpha1。仅将其更改为其他内容并返回 1 修复了 xib:

<customView translatesAutoresizingMaskIntoConstraints="NO" id="eEn-AF-z0I">

我仍然不确定是什么改变了这个值,但至少这解决了我的问题。此外,与图层相关的 属性 导致此重绘问题也是有意义的。

不支持层支持的 WebView。来自 Leopard 发行说明:

Most of the standard views and controls that AppKit and Mac OS X's other Cocoa frameworks provide are able to function in layer-backed mode in Leopard, with the exception of certain specialized views such as WebKit WebViews and Quartz Composer QCViews, whose use in layer-backed mode is not presently supported.

http://developer.apple.com/mac/library/releasenotes/cocoa/AppKitOlderNotes.html#Animation - "New View Animation Facilities, and Layer-Backed View Drawing" 部分的最后一段