我遇到了问题,如果有人之前已经经历过这种情况,我就会徘徊。
我的设置如下:
- 我使用的UIViewController由3个元素组成
- 顶部的UIView
- 中心的UITableView
- 底部的UiView
我正在做的是以下内容: 一旦显示键盘,我就可以将底部UIView设置为向上推动。这很好用,但我遇到的问题是,一旦键盘消失,表格视图中第一个单元格的节标题会随着动画的移动而下移一点。
extension UserDetailsViewController: KeyboardDelegate {
func keyboardWillShow(notification: NSNotification) {
if let info = notification.userInfo {
let keyboardFrame = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
UIView.animate(withDuration: 0.3, animations: {
if UserDeviceType.IPad || UserDeviceType.IPadPro {
self.updateConstraints(gradientHeight: 90, footerHeight: 60, footerBottom: keyboardFrame.height)
} else if UserDeviceType.IPhone5 || UserDeviceType.IPhone4 {
self.updateConstraints(gradientHeight: 65, footerHeight: 40, footerBottom: keyboardFrame.height)
} else if UserDeviceType.IPhoneX {
self.updateConstraints(gradientHeight: 90, footerHeight: 60, footerBottom: keyboardFrame.height)
} else {
self.updateConstraints(gradientHeight: 67, footerHeight: 40, footerBottom: keyboardFrame.height)
}
self.view.layoutIfNeeded()
self.tableView.layoutIfNeeded()
})
}
}
func keyboardWillHide(notification: NSNotification) {
UIView.animate(withDuration: 0.3, animations: {
self.setupConstraints()
self.view.layoutIfNeeded()
self.tableView.layoutIfNeeded()
})
}
}
答案 0 :(得分:0)
问题是由动画中的self.view.layoutIfNeeded()引入的。看来,在执行布局步骤之后,滚动视图的顶部插图不情愿地增加了。 解决方案是添加tableview函数的开始和结束更新。
func keyboardWillHide(notification: NSNotification) {
if let info = notification.userInfo {
self.tableView.beginUpdates()
UIView.animate(withDuration: info[UIKeyboardAnimationDurationUserInfoKey] as! TimeInterval, animations: {
self.setupConstraints()
self.view.layoutIfNeeded()
self.tableView.endUpdates()
})
}
}