ios - 从 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
吗?如果是这样,我不确定如何从像素转换为点。
解决方案
首先,如果您要检测高度,我不确定您需要什么,因为您没有在键盘视图中使用最大高度。但是为了检测最大宽度,这似乎是您链接的屏幕截图中的问题,请尝试以下操作:
而不是使用UIScreen.main.bounds
来检测宽度使用self.view.bounds.size.width
。这似乎是由操作系统设置的,将反映操作系统设置后您可以使用的最大宽度。第一次显示屏幕时,我最早能检测到这个值是在viewWillLayoutSubviews()
. 在屏幕旋转的情况下,我最早可以检测到新的尺寸,旋转后,在viewLayoutMarginsDidChange()
事件中。
由于在viewLayoutMarginsDidChange()
显示视图时也会触发该事件,因此您可以在这两种情况下使用该事件。
推荐阅读
- php - 我的 Laravel 网站正在将所有帖子请求重定向到索引页面
- azure - 托管标识 Azure 角色分配?
- reactjs - 自定义反应挂钩未获取值
- ubuntu - powertop 估计的 W 文档
- boost - Boost log crash 用一个简单的例子(Linux)
- react-native - 如何在开发中的两个 Expo 应用程序之间建立深度链接?
- sql - 提高选择和插入的性能
- git - 如何在 Flutter 中引用存储库中的包?
- composer-php - Travis CI:为什么作曲家有时会安装整个包,有时不会?
- python - pydev 调试器:进程 7752 正在连接