首页 > 解决方案 > 从 UIScreen.main.bounds 确定 UIInputViewController 的安全区域

问题描述

我正在使用 UIInputViewController 制作自定义键盘。

我想在一个矩形内显​​示一个 xib 布局。现在,我确定了 CGRect 的正确大小,我将我的 xib 布局放置在其中,UIScreen.main.bounds从 但是,UIScrren.main.bounds.width当我将 iPhone 11 旋转到横向时,它比安全区域宽度长。结果,我的矩形太宽了,一部分没有显示出来。 iphone11屏幕

如何确定安全界限?我想用类似UIScreen.main.bounds的东西代替,UIScreen.main.safeArea但似乎我必须做一些比这更复杂的事情。

我应该使用UIScreen.main.nativeBounds吗?如果是这样,我不确定如何从像素转换为点。

标签: iosuiinputviewcontrolleriphone11

解决方案


首先,如果您要检测高度,我不确定您需要什么,因为您没有在键盘视图中使用最大高度。但是为了检测最大宽度,这似乎是您链接的屏幕截图中的问题,请尝试以下操作:

而不是使用UIScreen.main.bounds来检测宽度使用self.view.bounds.size.width。这似乎是由操作系统设置的,将反映操作系统设置后您可以使用的最大宽度。第一次显示屏幕时,我最早能检测到这个值是在viewWillLayoutSubviews(). 在屏幕旋转的情况下,我最早可以检测到新的尺寸,旋转后,在viewLayoutMarginsDidChange()事件中。

由于在viewLayoutMarginsDidChange()显示视图时也会触发该事件,因此您可以在这两种情况下使用该事件。


推荐阅读