【问题标题】:TextField is not pushed up smoothly by keyboard, like in Whatsapp and HangoutsTextField 没有被键盘顺利推上,就像在 Whatsapp 和环聊中一样
【发布时间】:2014-04-30 09:02:52
【问题描述】:

我正在尝试模仿 Whatsapp 应用中的 UITextField-keyboard 关系。 众所周知,屏幕底部有一个固定的UITextField,当您点击UITextField 时,键盘会出现。当键盘出现时,UITextField 粘在键盘上,它们一起滑动非常顺畅。

阅读 Apple 的文档页面,其中有关在键盘下多次移动视图。

到目前为止我所尝试的:

  • 收听键盘通知。我在动画块中同时使用了setFrame:setContentOffset:animated: 方法。没有像预期的那样工作。键盘动画的UIViewAnimationCurve 值是7,我找不到它的含义,因为UIViewAnimationCurve 只有4 个整数枚举类型。我认为键盘动画的动画曲线没有提供给开发者,希望我错了。

  • 使用具有较低 z-index 值的自定义 inputAccessoryView。我有两个确切的UIViews,一个固定在底部,另一个是自定义的inputAccessoryView,因为它具有较低的zPosition 值,所以它会隐藏在固定的zPosition 之下。因此,用户不会看到inputAccessoryView 从屏幕外出现,但固定视图被键盘向上推。但没有用,再一次。更改 zPosition 值不会改变任何内容。

最后,我认为 Whatsapp 可能没有使用系统键盘,而是使用自定义键盘。但如果是这样的话,这是一个非常非常糟糕的设计选择,因此该选项被消除了。

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

【问题讨论】:

    标签: ios uiscrollview uitextfield iphone-softkeyboard


    【解决方案1】:

    最直接的方法被证明是正确的方法。

    我应该在keyboardWillShow/keyboardWillHide 通知和animateWithDuration: 被触发时听取它们。我错过的一点是通过移位(UIViewAnimationCurve 转换为UIViewAnimationOptionCurve

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

    【讨论】:

      【解决方案2】:

      值“7”不是 2 的幂,因此它不是特定的动画值,而是多个动画值的总和(或按位或)。 解决方案(为我工作)是:

      [UIView beginAnimations:nil context:nil];
      [UIView setAnimationDuration:[info[UIKeyboardAnimationDurationUserInfoKey] floatValue]];
      [UIView setAnimationCurve:[userInfo[UIKeyboardAnimationCurveUserInfoKey] intValue]];
      // set view frame here
      [UIView commitAnimations];
      

      祝你好运:)

      【讨论】:

        猜你喜欢
        • 2020-11-10
        • 1970-01-01
        • 1970-01-01
        • 2018-12-03
        • 2015-11-23
        • 2016-11-13
        • 1970-01-01
        • 2012-08-14
        • 1970-01-01
        相关资源
        最近更新 更多