InputAccessoryView停靠在底部

施蒂安·霍兰

我正在尝试实现与Apple Messages应用程序底部文本输入栏相似的定位行为。

我尝试了许多方法,上下搜索,有很多类似的问题,但没有一个令人满意。

指定:

  1. UIToolbar视图底部有一个
  2. 当键盘出现和消失时,工具栏将跟随键盘
  3. 当键盘可见时,工具栏应位于键盘顶部
  4. 隐藏键盘后,工具栏将停留在视图底部(“停靠”)

建议的解决方案:

响应键盘外观通知,手动为工具栏设置动画

此解决方案不满足第二个要求的特殊情况(工具栏应在键盘出现和消失时跟随键盘):

  • 在iOS 7中UIScrollViewKeyboardDismissMode被引入。它启用了交互式手势以关闭键盘。当用户平移经过键盘的顶部边缘时,键盘框架逐渐跟随。该解决方案没有采取任何措施来适应这种行为,只是使工具栏滞留在其动画位置。

此外,此解决方案还无法满足第三个要求的特殊情况(当键盘可见时,工具栏应位于键盘顶部):

  • 回转。此解决方案需要额外的,讨厌的无关代码(如我们将在下一个建议的解决方案中看到的那样)以响应设备旋转来旋转工具栏。

此解决方案的另一个问题:

  • 键盘高度。使用此解决方案时,工具栏不被认为是键盘高度的一部分,因此必须编写其他代码来支持内容的正确插入。

下一个建议的解决方案:

使用UIResponderinputAccessoryView

这种解决方案似乎是Apple打算支持这种行为的方式,因为它解决了手动设置工具栏动画的所有缺点。但是此解决方案完全没有满足第四项要求(当隐藏键盘时,工具栏停留在视图底部)。


似乎解决方案是使用UIResponderinputAccessoryView,但以某种方式使inputAccessoryView该视图不移动。我正在寻找干净的代码来完成此任务。在其他地方进行了精心的,几乎是高尚的尝试,但是如上所述,它们不符合要求。

在我的特殊情况下,我希望使用UINavigationController的工具栏,它会带来其他问题,因为这不是预期的行为UINavigationController没关系,我愿意介绍一些hacky修复程序来完成此操作。

乔纳森·巴丹(Jonathan Badeen)

Jason Foreman(@threeve)刚刚向我展示了“该”解决方案。在视图控制器上(是的,视图控制器)添加inputAccessoryView:并返回要停靠在底部的视图,并使用键盘进行移动。它就是有效的。该视图实际上不需要位于您的视图层次结构中,它将由视图控制器自动插入。

编辑:还实现canBecomeFirstResponder并返回YES(如Max Seelemann所述)。reloadInputViews也可以很方便。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

停靠在Conemu

将页脚停靠在Main Div的底部

停靠在QtQuick中

是否在MDI表单中将StatusStrip控件停在底部,将面板停靠在右侧?

将中间容器放在前一个容器之后,但停靠在底部

Visual Studio 2017选择停靠在底部的选项卡

WPF:停靠在“顶部”和“底部”的 DockPanel 中的两个控件仍然在底部留有空间

如何更改停靠在自定义底部应用程序栏中的 FAB 周围的颜色?

如果不需要滚动,是否可以将RecyclerView中的最后一项停靠在底部?

如何使RichTextBox正确停靠在WPF中

W540停靠在薄荷中冻结

Navbar控件停靠在拆分容器面板1中

材质设计WPF图标按钮未停靠在右侧

状态栏未正确停靠在停靠面板中

如何将Chrome开发者控制台停靠在左侧?

intellij无法将变量选项卡停靠在调试视图中

如何使 matplotlib 工具欄能夠停靠在 pyqt5 窗口的側面?

如何在VS Code版本1.29.1中将终端窗口停靠在右侧?

在滚动本机时如何将View组件停靠在屏幕顶部?

破折号到面板/破折号停靠在 Ubuntu 19.10

当 TLP 自动调整大小时,自动调整停靠在 TableLayoutPanel 中的标签

浮动控制按钮,停靠在wpf .net core应用程序的程序右侧

将一个面板停靠在其他两个面板之间

为什么我的Flutter Inspector面板不像其他工具那样停靠在IDE的右侧?

当电子应用程序停靠在屏幕右侧时,如何向左调整窗口大小?

设置停靠在主窗口中的电子邮件的MailItem.Sensitivity

Unity-将编辑器窗口停靠在游戏视图上方

如何使用qtDesigner将子窗口停靠在pyqt5的MDI区域中

如何将两个浮动DockContents停靠在一起?