ios - TextField 不会被键盘平滑地向上推,就像在 Whatsapp 和 Hangouts 中一样

标签 ios uiscrollview uitextfield iphone-softkeyboard

我试图模仿 UITextField - Whatsapp 应用程序中的键盘关系。
大多数人都知道,有一个固定的 UITextField当您点击 UITextField 时,屏幕底部会出现键盘。 .当键盘出现时,UITextField粘在键盘上,它们非常顺畅地滑动在一起。

多次阅读有关在键盘下移动 View 的 Apple 文档页面。

到目前为止我尝试过的:

  • 收听键盘通知 .我两个都用了 setFrame:setContentOffset:animated:动画块中的方法。没有像预期的那么好。 UIViewAnimationCurve键盘动画的值为 7,我找不到它的含义 UIViewAnimationCurve只有 4 个整数枚举类型。我认为键盘动画的动画曲线没有提供给开发人员,希望我是错的。
  • 使用具有较低 z-index 值的自定义 inputAccessoryView .我有两个精确的 UIViews ,一个固定在底部,另一个是定制的inputAccessoryView这将隐藏在固定的下方,因为它具有较低的 zPosition值(value)。因此,用户不会看到 inputAccessoryView正在从屏幕外部出现,但固定 View 被键盘向上推。但是又没用。换 zPosition值不会改变任何东西。

  • 最后,我认为 Whatsapp 可能不是使用系统键盘,而是自定义键盘。但如果是这种情况,这是一个非常糟糕的设计选择,因此该选项被淘汰。

    任何人都知道 Whatsapp(或环聊)是如何实现的?

    最佳答案

    事实证明,最直接的方法是正确的方法。

    我应该听听keyboardWillShow/keyboardWillHide通知和 animateWithDuration:当它们被触发时。我错过的一点是类型转换 UIViewAnimationCurve进入 UIViewAnimationOptionCurve通过移动 (<<16)。

    NSDictionary *notification = [aNotification userInfo];
    UIViewAnimationOptions curveValue = [[info objectForKey:UIKeyboardAnimationCurveUserInfoKey] unsignedIntegerValue] << 16;
    ...
    [UIView animateWithDuration:{animation duration}
                          delay:0
                        options:curveValue
                     animations:^{
                         //animation code
                     }
                     completion:nil];
    

    关于ios - TextField 不会被键盘平滑地向上推,就像在 Whatsapp 和 Hangouts 中一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23383916/

    相关文章:

    ios - 添加 iOS 8 启动画面会导致 App 扭曲

    iphone - NSFileManager 多实例写入原子性

    ios - 缩放和 ScrollView

    ios - 为什么我不能将 secureTextEntry 与 UTF-8 键盘一起使用?

    ios - 如何使用 IBAFormSection 减小宽度?

    iOS - 禁用答案但保留 Crashlytics

    iphone - UIScrollView 如何从其 subview 中窃取触摸?

    iphone - 基于 UIScrollView 中的滚动旋转滚轮

    swift - 将 translatesAutoResizingMaskIntoConstraints 设置为 false 会导致 UITextFields 右 View 出现模糊的布局问题

    ios - CLLocation 'coordinate' 不可用