键盘动画移动UITableView部分标题

时间:2018-04-30 10:54:32

标签: ios swift keyboard uitableviewsectionheader

我遇到了问题,如果有人之前已经经历过这种情况,我就会徘徊。 我的设置如下: - 我使用的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()
    })
}
}

键盘正确显示 Keyboard showing up correctly

键盘动画完成后 After the keyboard animating out

1 个答案:

答案 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()
        })
    }
}