ios 使用蓝牙键盘时,iPad应用程序在枚举的PreferredFocusEnvironments上挂起

g6ll5ycj  于 2023-02-26  发布在  iOS
关注(0)|答案(1)|浏览(152)

应用程序大多是用Swift编写的,带有一些Objective-C代码。最近我发现将蓝牙键盘连接到iPad会导致这个应用程序严重的2秒以上挂起。
使用Time Profiler暴露了导致挂起的函数(下面的回溯),但我的问题是如何阻止这种情况的发生?CPU使用率也达到了100%。
这些挂起只会在蓝牙键盘连接iPad时发生,如果我关闭iPad上的蓝牙,它就会恢复流畅运行。
当我尝试触摸屏幕上的UI时,它似乎挂起,但触发挂起的操作并不总是相同的。
我试图覆盖UIKit.UIFocus周围的这些方法/变量,但没有任何效果:

  1. updateFocusIfNeeded -尽管处于回溯中,但从未命中
  2. shouldUpdateFocus -从未命中
  3. enumeratePreferredFocusEnvironments -返回空数组并命中,但仍循环并挂起应用程序
    iPad运行iOS 16.3

w6mmgewl

w6mmgewl1#

我能够通过在挂起的UIViewController上添加一个微小、清晰的UITextField来解决挂起问题。
UIKit focusEnvironment代码似乎在所有视图中循环,寻找键盘的焦点,但由于没有任何内容可供键入,因此搜索时间长到足以挂起应用程序。现在我添加了UITextField,它找到了焦点并停止循环。

相关问题