我正在尝试实现与 Apple 消息应用中底部文本输入栏类似的定位行为。
我尝试了很多方法,到处搜索,有很多类似的问题,但没有一个是令人满意的。
要指定:
- 在 View 底部有一个
UIToolbar
- 工具栏随着键盘的出现和消失而跟随键盘
- 当键盘可见时,工具栏应位于键盘上方
- 当键盘隐藏时,工具栏保持(“停靠”)在 View 的底部
建议的解决方案:
手动设置工具栏动画以响应键盘出现通知
这个解决方案不满足第二个需求的特殊情况(工具栏随着键盘出现和消失):
- 在 iOS 7 中,引入了
UIScrollViewKeyboardDismissMode
。它启用用于关闭键盘的交互式手势。当用户平移过键盘的顶部边缘时,键盘框架逐渐跟随。此解决方案无法适应此行为,只会让工具栏停留在其动画位置。
此外,该解决方案也无法满足第三个要求的特殊情况(当键盘可见时,工具栏应保持在键盘顶部):
- 旋转。此解决方案需要额外的、令人讨厌的无关代码(正如我们将在下一个提议的解决方案中看到的那样)来旋转工具栏以响应设备旋转。
此解决方案的另一个问题:
- 键盘高度。使用此解决方案,工具栏不会被假定为键盘高度的一部分,因此必须编写额外的代码来支持内容的正确插入。
下一个建议的解决方案:
使用UIResponder
的inputAccessoryView
这个解决方案似乎是 Apple 打算支持这种行为的方式,因为它解决了手动设置工具栏动画的所有缺点。但是这个解决方案完全忽略了第四个要求(当隐藏键盘时,工具栏保持(“停靠”)在 View 的底部)。
似乎解决方案是使用 UIResponder
的 inputAccessoryView
,但不知何故使 inputAccessoryView
不会移动到 View 下方。我正在寻找干净的代码来完成这个。别处有精心设计的、近乎崇高的尝试,但如前所述,它们不符合要求。
在我的特殊情况下,我希望使用 UINavigationController
的工具栏,这会带来其他问题,因为这不是 UINavigationController
的预期行为。没关系,我愿意引入一些 hacky 修复来实现这一点。
最佳答案
Jason Foreman (@threeve) 刚刚向我展示了“那个”解决方案。在您的 View Controller (是的, View Controller )上添加 inputAccessoryView:
并返回您想要停靠在底部并使用键盘移动的 View 。它只是工作。 View 实际上不需要位于您的 View 层次结构中,它将由 View Controller 自动插入。
编辑:还实现 canBecomeFirstResponder 并返回 YES(如 Max Seelemann 所述)。 reloadInputViews 也很方便。
关于ios - InputAccessoryView 停靠在底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19764293/