UE4:自定义iOS文本输入界面的补充说明

前言

之前修改了iOS端非嵌入式键盘的类型之后遇到了一些问题,这里做一个补充说明。

详细的修改方法可以参考UE4:自定义iOS文本输入界面

问题1:iPad表现异常

在之前的版本中,发现在iPad设备上输入界面唤起之后不正常,看不到按钮和输入框

查找资料之后发现是modalPresentationStyle默认值在不同设备上的表现不一致的问题

官方文档

modalPresentationStyle是一个枚举值,默认是UIModalPresentationAutomatic,这种情况下,在iPad上这种尺寸较大的设备上,view的大小并不是和整个屏幕相同的

  • UIModalPresentationFullScreen:视图控制器会全屏显示,覆盖底层的视图控制器。
  • UIModalPresentationPageSheet:视图控制器以页形式显示,部分底层视图控制器可见。在iPad上,如果键盘未显- 示,可以拖动下降。
  • UIModalPresentationFormSheet:视图控制器在屏幕中心以表单形式显示,底层视图控制器在视图控制器周围模糊- 可见。只在iPad上有效。
  • UIModalPresentationCurrentContext:视图控制器在当前上下文中显示,取决于父视图控制器的定义。
  • UIModalPresentationCustom:自定义视图控制器的显示方式,需要使用自定义转场动画。
  • UIModalPresentationOverFullScreen:视图控制器全屏显示,但底层视图控制器的内容在转场动画期间可见。
  • UIModalPresentationOverCurrentContext:视图控制器在当前上下文的内容上显示,底层内容在转场动画期间可- 见。
  • UIModalPresentationPopover:视图控制器在弹出窗口中显示,需要指定一个锚点。只在iPad上有效。
  • UIModalPresentationNone:不使用模态呈现样式。
  • UIModalPresentationAutomatic:自动选择最适合的呈现样式,通常是UIModalPresentationPageSheet或- UIModalPresentationFormSheet。

修改办法:

在这种情况下,显然是希望全屏的,并且不要挡住底层的视图,所以需要修改为UIModalPresentationOverCurrentContext,这样就可以正常获取到实际设备屏幕的大小了

问题2:外接物理键盘的iOS或者自带键盘的Mac设备无法唤起的问题

这个问题就很emmm

由于我原本选择了在接收到键盘唤起通知的时候修改按钮和输入框的布局,所以在这种情况下就无法唤起了

因为连接了物理键盘的设备,没有UIKeyboardWillShowNotification或者UIKeyboardDidShowNotification的通知

并且在连接上物理设备的时候会触发hide的通知,当场又被隐藏掉了

修改办法:

简单,只要把修改布局的时机改到viewDidLayoutSubviews就可以了,可以参考上一篇。不过这里是没有键盘高度可以拿的,可以在UIKeyboardWillShowNotification里面再次修改布局即可

顺便可以考虑在检查是否为Mac设备,直接禁用非嵌入式键盘


UE4:自定义iOS文本输入界面的补充说明
http://muchenhen.com/posts/47622/
作者
木尘痕
发布于
2023年11月15日
许可协议