首页 > 解决方案 > 视图约束不更新

问题描述

当键盘出现和消失时,我正在尝试更新视图的约束

我有关于keyboardWillShow 和keyboardWillHide 的通知以及调用它们的相应函数:

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name:UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)

@objc private func keyboardWillShow(notification: NSNotification) {
    if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
        let keyboardFrameEnd = keyboardFrame.cgRectValue
        let convertedKeyboardFrameEnd = self.view.convert(keyboardFrameEnd, from: nil)
        let intersection = convertedKeyboardFrameEnd.intersection(listView.frame)
        if intersection.size.height > 0 {
            self.listView.snp.makeConstraints { make in
                make.top.leading.trailing.equalTo(0)
                make.bottom.equalTo(-intersection.height)
            }
            self.view.setNeedsLayout()
            self.view.layoutIfNeeded()
        }
    }
}

@objc private func keyboardWillHide() {
    self.listView.snp.makeConstraints { make in
        make.edges.equalTo(0)
        make.bottom.equalTo(0)
    }
    self.listView.setNeedsUpdateConstraints()
    self.listView.updateConstraints()
    self.view.setNeedsLayout()
    self.view.layoutIfNeeded()
}

似乎keyboardWillShow 被调用并将我的listView 的大小更新为键盘外的可见大小。但是,keyboardWillHide 被调用并且它似乎没有将底部更新为值为 0,所以我最终遇到了一种情况,即我的视图没有调整回其原始大小。任何想法这里可能有什么问题?

标签: iosswiftsnapkit

解决方案


推荐阅读