首页 > 解决方案 > 在 UINavigationController 中定义自定义过渡动画器时锚定键盘,如 iMessage 应用程序

问题描述

我在导航控制器中创建了一个自定义推送/弹出转换。一切都很好,除了一个小事实:当我向后滑动键盘时,它不会锚定到弹出的视图控制器上。

这里有一些图片来展示正在发生的事情以及我想要什么。

在此处输入图像描述

仅当我使用 UInavigationControllerDelegate 方法替换标准动画师时才会发生这种情况。

public func navigationController(
    _ navigationController: UINavigationController,
    animationControllerFor operation: UINavigationController.Operation,
    from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {

    return TransparentAnimator(operation: operation)
}

标签: iosuinavigationcontrollercustom-transition

解决方案


UINavigationController 的默认视差转换使用私有方法(隐藏且只有 Apple 可以使用)来像这样移动键盘。

一些应用程序仍然这样做,例如 Facebook 的 Messenger。在玩过他们的过渡后,我 99% 确信他们正在为过渡拍摄键盘快照。如果键盘正在为某些东西设置动画,则动画将暂停(因为它是快照)。此外,由于他们正在关闭键盘以实现此效果,因此在取消动画时键盘将重置(因此,如果您在表情符号视图中,它将重置回字母)。

您可以在此处查看如何拍摄键盘快照:iPhone 快照,包括键盘


推荐阅读