ios - 在 UINavigationController 中定义自定义过渡动画器时锚定键盘,如 iMessage 应用程序
问题描述
我在导航控制器中创建了一个自定义推送/弹出转换。一切都很好,除了一个小事实:当我向后滑动键盘时,它不会锚定到弹出的视图控制器上。
这里有一些图片来展示正在发生的事情以及我想要什么。
仅当我使用 UInavigationControllerDelegate 方法替换标准动画师时才会发生这种情况。
public func navigationController(
_ navigationController: UINavigationController,
animationControllerFor operation: UINavigationController.Operation,
from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return TransparentAnimator(operation: operation)
}
解决方案
UINavigationController 的默认视差转换使用私有方法(隐藏且只有 Apple 可以使用)来像这样移动键盘。
一些应用程序仍然这样做,例如 Facebook 的 Messenger。在玩过他们的过渡后,我 99% 确信他们正在为过渡拍摄键盘快照。如果键盘正在为某些东西设置动画,则动画将暂停(因为它是快照)。此外,由于他们正在关闭键盘以实现此效果,因此在取消动画时键盘将重置(因此,如果您在表情符号视图中,它将重置回字母)。
您可以在此处查看如何拍摄键盘快照:iPhone 快照,包括键盘
推荐阅读
- typescript - 在 react native 上使用 DrawerNavigator 和堆栈导航
- reactjs - How to change image using hover in jsx
- mysql - 将 TIMESTAMP 字段添加到 MySQL
- pandas - SQLCMD--Using the :r Command I have a text file with multiple outputs,is there a way to add a delimiter between outputs or an easy way to split output
- list - 类中的函数列表 - Dart/Flutter
- google-kubernetes-engine - Why doesn't Istio on the GKE create a Gateway?
- eclipse - 运行 Prometheus 时,我的所有端点都开始返回 404
- dataframe - 在java中的spark数据框中选择groupBy中未包含列的对应值
- visual-studio-code - 在 VS-Code 编辑器中,如何区分自动换行和非自动换行?
- python - 使用正则表达式从 os.walk 给出的文件名中提取子字符串