UITextField,当辞职第一响应者时,导致文本奇怪的动画滚动

时间:2016-01-31 06:26:51

标签: ios swift uitextfield interface-builder

我在UITableView中为登录表单实现了几个UITextField。在第一次中辞职第一响应者时,发生了一个非常奇怪的动画跳跃。由于这些几乎完全是在Interface Builder中使用.xib文件构建的,因此我几乎没有可添加的代码。但这里有一个有趣的.gif来显示行为:

更新

我已将其缩小到我正在收听键盘事件以调整视图约束的事实。这是导致问题的代码:

func keyboardWillHide(notification: NSNotification) {
    // tried self.formContainer.layoutIfNeeded() here too to force pending layouts
    formContainerYConstraint.constant = 40
    UIView.animateWithDuration(0.4) { () -> Void in
        self.formContainer.layoutIfNeeded()
    }
}

...表单容器是一个包含表视图和登录按钮的视图。

2 个答案:

答案 0 :(得分:4)

感觉像一个完全黑客(我喜欢有人发布更好的答案)但同时,我通过在动画操作上添加一点延迟来解决这个问题 - 我怀疑这与在两个输入字段之间切换时发生的变为 - 和resignFirstResponder事件。

let delay: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
dispatch_after(delay, dispatch_get_main_queue()) { () -> Void in
    self.formContainerYConstraint.constant = 40
    UIView.animateWithDuration(0.4) { () -> Void in
        self.formContainer.layoutIfNeeded()
    }
}

答案 1 :(得分:1)

试试这个

- (void)textFieldDidEndEditing:(UITextField *)textField
{
  [textField layoutIfNeeded];
}