React native RCTUIManager.m错误帧不是<;的后代;RCTShadowView>;国际标准化组织

React native RCTUIManager.m错误帧不是<;的后代;RCTShadowView>;国际标准化组织,react-native,React Native,在切换文本输入和显示键盘时出现此错误。文本输入位于动画.view中,我以模式显示该视图 [error][tid:com.facebook.react.ShadowQueue][RCTUIManager.m:1188] view <RCTShadowView: 0x1284daae0; viewName: RCTTextField; reactTag: 318; frame: {{0, 27.5}, {256, 18}}> (tag #318) is not a descendant

在切换文本输入和显示键盘时出现此错误。文本输入位于动画.view中,我以模式显示该视图

[error][tid:com.facebook.react.ShadowQueue][RCTUIManager.m:1188] view <RCTShadowView: 0x1284daae0; viewName: RCTTextField; reactTag: 318; frame: {{0, 27.5}, {256, 18}}> (tag #318) is not a descendant of <RCTShadowView: 0x12827bd40; viewName: RCTView; reactTag: 256; frame: {{0, 0}, {320, 799}}> (tag #256)
[error][tid:com.facebook.react.ShadowQueue][RCTUIManager.m:1188]视图(标记#318)不是(标记#256)的后代

问题

我发现,这个错误的主要原因是当多个视图同时监听键盘时。例如,当导航堆栈中的多个滚动视图正在侦听键盘事件以滚动到文本输入时,可能会发生这种情况。当库的用户将多个滚动视图推到同一导航堆栈上时,多次出现此问题

这是RN内部的一个已知问题。您可能会发现围绕此PR的讨论很有帮助:

当前解决方案

我不知道您的用例是什么,但解决方案是确保您没有多个视图同时监听键盘。您可以在适当的时间注册和注销键盘事件侦听器,或者(在我上面描述的情况下,问题是由导航堆栈中的多个键盘感知滚动视图引起的),在推送新视图之前从导航堆栈中删除订阅键盘事件的任何视图


从上面的PR中可以看出,修复此问题可能很快就会变得容易得多。但与此同时,您可以手动检查键盘上有多少个侦听器。

您能否更详细地解释如何手动检查键盘侦听器?