我在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()
}
}
...表单容器是一个包含表视图和登录按钮的视图。
答案 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];
}