UIMenuController 在呈现后立即被解雇

UIMenuController is getting dismissed immediately after being presented

我已将 UIWebView 子类化以在其中添加自定义 UIMenuController 功能,它在 iOS 9 之前一直运行良好。我不确定发生了什么变化,但现在我 运行 遇到了一种情况当我点击应该显示菜单的 link 时,菜单会短暂显示,但会消失(我不再点击)。

我很难弄清楚解雇是从哪里来的。我正在观察 UIMenuControllerDidHideMenuNotification 通知,确实在菜单消失后立即被调用,但我很难找到解雇的原因。

我知道可能潜伏着许多不同的问题,但我想知道是否有人以前经历过这样的事情?有没有办法以某种方式追踪解雇的原因?

请尝试在您的视图控制器中添加以下方法。

- (BOOL) canBecomeFirstResponder { 
   return YES; 
}

我和 iOS9 有同样的问题,我认为这是多进程的结果。这不是理想的解决方案,但是......在我成为 FirstResponder 之后,我在 setMenuVisible:YES .

之前添加了一个 DELAY

[self performSelector:@selector(showMenuController:) withObject:point afterDelay:0.4];

我 运行 遇到了类似的问题,试图在自定义视图中显示 UIMenuController。并且上面提到的延迟修复不起作用。

为了修复它,我必须向 canBecomeFirstResponder 添加覆盖,以便它返回 true,我的自定义视图和它包含的 viewController。

很奇怪;然而,在我的例子中,我将标签的 UIFont 设置为 .SFUIText-Light 并且它导致 menuController 自动关闭。解决办法是把字体改成SanFranciscoDisplay.

顺便说一句,如果您使用 git 作为版本控制,我建议您使用 git bisect 来调试导致此错误的提交。