UIWebView抛出[WebActionDisablingCALayerDelegate setBeingRemoved:]的异常

Ari*_*sky 43 objective-c uiwebview ios ios8

在针对iOS 8运行时,我开始看到来自以下内容的以下异常UIWebView:

[WebActionDisablingCALayerDelegate setBeingRemoved:]:无法识别的选择器发送到实例0x167ee900

* WebKit在webView中丢弃了一个未捕获的异常:willRemoveScrollingLayer:withContentsLayer:forNode:delegate: - [WebActionDisablingCALayerDelegate setBeingRemoved:

当我更改我的一些约束UIWebView然后调用时,会发生这种情况:

 self.webViewWidthConstraints.constant = newWidth;
 [self.webView setNeedsLayout];
 [self.webView layoutIfNeeded];
Run Code Online (Sandbox Code Playgroud)

(这样可以重新渲染webview的内容以正确调整其宽度).

幸运的是,异常被丢弃,因此应用程序不会崩溃.为什么会发生这种情况,有没有办法阻止它?

小智 12

我发现通过添加"-webkit-transform:translateZ(0px);" 对于可滚动的内容(我的可滚动容器中有一个div),它为我解决了问题.希望这可以帮助.

  • 我把它放在我的`body`标签上并修复了所有内容 (2认同)

And*_*jão 9

不确定这是不是你的情况,但我也开始在iOS 8上看到这个问题,我们跟踪它在iframe上使用以下CSS属性:

-webkit-overflow-scrolling: touch;
Run Code Online (Sandbox Code Playgroud)

我们删除它后,我们不再有这些错误消息.

注意:在我的情况下,它不是为了响应更改任何约束而发生的,而是在我们浏览HTML时发生的.

  • 在我的实例中,当单个webview中存在两个或多个`<div>`元素时,会发生这种情况,其中`-webkit-overflow-scrolling:touch;`属性. (3认同)

And*_*kha 7

由于没有给出的答案可以帮助我,我必须借助Objective-C运行时解决这个问题.

首先,我提供了一个简单的功能:

id setBeingRemoved(id self, SEL selector, ...)
{
   return nil;
}
Run Code Online (Sandbox Code Playgroud)

那么这两行:

    Class class = NSClassFromString(@"WebActionDisablingCALayerDelegate");
    class_addMethod(class, @selector(setBeingRemoved:), setBeingRemoved, NULL);
Run Code Online (Sandbox Code Playgroud)

它有效.