在 UINavigationController 中定义自定义过渡动画器时锚定键盘,如 iMessage 应用程序

Posted

技术标签:

【中文标题】在 UINavigationController 中定义自定义过渡动画器时锚定键盘,如 iMessage 应用程序【英文标题】:Anchor keyboard like iMessage app when define custom transition animator in UINavigationController 【发布时间】:2018-11-17 23:49:25 【问题描述】:

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

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

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

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

    return TransparentAnimator(operation: operation)

【问题讨论】:

【参考方案1】:

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

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

您可以在此处查看如何拍摄键盘快照:iPhone snapshot including keyboard

【讨论】:

感谢您的回答,听起来像是一个计划,但我怎么能在没有动画的情况下关闭键盘,以便用户不会注意到键盘被快照替换?

以上是关于在 UINavigationController 中定义自定义过渡动画器时锚定键盘,如 iMessage 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?

从嵌入在 UINavigationController 中的一个视图控制器到另一个 UINavigationController

(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换

关闭 UINavigationController 并呈现另一个 UINavigationController

带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller

UINavigationController 标题和按钮