我正在尝试实现与 Apple 消息应用程序中的底部文本输入栏类似的定位行为。
我尝试了很多方法,搜索了高低,并且有很多类似的问题,但没有一个令人满意。
要指定:
UIToolbar
视图底部有一个- 工具栏是随着键盘的出现和消失而跟随键盘
- 当键盘可见时,工具栏应位于键盘顶部
- 当键盘被隐藏时,工具栏保持(“停靠”)在视图的底部
建议的解决方案:
手动为工具栏设置动画以响应键盘外观通知
此方案不满足第二个要求的特殊情况(工具栏是随着键盘的出现和消失而跟随键盘):
- 在 iOS 7 中,
UIScrollViewKeyboardDismissMode
被引入。它启用了关闭键盘的交互式手势。随着用户平移经过键盘的顶部边缘,键盘框架逐渐跟随。该解决方案对适应这种行为没有任何作用,只是将工具栏搁置在其动画位置。
此外,此解决方案也无法满足第三个要求的特殊情况(当键盘可见时工具栏应保持在键盘顶部):
- 回转。该解决方案需要额外的、令人讨厌的无关代码(正如我们将在下一个建议的解决方案中看到的那样)来旋转工具栏以响应设备旋转。
此解决方案的另一个问题:
- 键盘高度。使用此解决方案,工具栏不假定为键盘高度的一部分,因此必须编写附加代码以支持正确插入内容。
下一个建议的解决方案:
使用UIResponder
的inputAccessoryView
这个解决方案似乎是 Apple 打算支持这种行为的方式,因为它解决了手动为工具栏设置动画的所有缺点。但是这个解决方案完全错过了第四个要求(当键盘被隐藏时,工具栏保持(“停靠”)在视图的底部)。
似乎解决方案是使用UIResponder
's inputAccessoryView
,但以某种方式使inputAccessoryView
not 在视图下方移动。我正在寻找干净的代码来实现这一点。其他地方也有精心设计,几乎是高尚的尝试,但如前所述,它们不符合要求。
在我的特殊情况下,我希望使用UINavigationController
' 工具栏,这会带来其他问题,因为这不是UINavigationController
. 无论如何,我愿意介绍一些 hacky 修复来实现这一点。