ios - 视图约束不更新
问题描述
当键盘出现和消失时,我正在尝试更新视图的约束
我有关于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,所以我最终遇到了一种情况,即我的视图没有调整回其原始大小。任何想法这里可能有什么问题?
解决方案
推荐阅读
- angular - 如何使用设置控制方法填充 FormArray 的值?
- javascript - 打字稿:在另一个类构造函数中创建类实例数组
- cobol - 如何在 Cobol 中进行货币分解
- r - 如何将低于列的值(因子)带到R中的其他新列
- php - 如何正确使用 laravel 中的 chunk 方法更新数千行?
- mongodb - 如何从Mongodb中的生日日期计算平均年龄?
- c# - C# WPF 以编程方式添加表格边框
- javascript - 从 typescript/javascript 中的 Json 对象读取属性
- javascript - 将“Id”选中的复选框传递给模态引导程序并发送到控制器
- javascript - 在 npm 上发布 wasm 库的首选方式是什么?