我有一个搜索栏文本字段和一个表格 View (用于谷歌自动完成),我想在键盘进入 View 时向上翻译。我成功地做到了这一点,但是,我收到了关于我的约束的警告/错误。我在此 View 上通过 Storyboard使用自动布局,并尝试在显示/隐藏键盘之前/之后禁用/启用约束,但我仍然遇到这些错误。我没有正确禁用自动布局吗?我遵循了 this 中给出的内容所以回应。
override func viewDidLoad() {
...
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil)
...
}
func keyboardWillShow(sender: NSNotification) {
self.pixieLabel.hidden = true
self.searchBar.setTranslatesAutoresizingMaskIntoConstraints(true)
self.startingTableView.setTranslatesAutoresizingMaskIntoConstraints(true)
self.searchBar.frame.origin.y -= 150
self.startingTableView.frame.origin.y -= 150
}
func keyboardWillHide(sender: NSNotification) {
self.pixieLabel.hidden = false
self.searchBar.setTranslatesAutoresizingMaskIntoConstraints(false)
self.startingTableView.setTranslatesAutoresizingMaskIntoConstraints(false)
self.searchBar.frame.origin.y += 150
self.startingTableView.frame.origin.y += 150
}
解决方案代码
func keyboardWillShow(sender: NSNotification) {
self.pixieLabel.hidden = true
self.seachBarTopConstraint.constant -= 150
self.searchBar.layoutIfNeeded()
}
func keyboardWillHide(sender: NSNotification) {
self.pixieLabel.hidden = false
self.seachBarTopConstraint.constant += 150
self.searchBar.layoutIfNeeded()
}
最佳答案
我认为您应该在 Interface Builder 中创建对约束的 @IBOutlet
引用,然后更改常量
,而不是调整frame
值当您想为它们设置动画时,这些约束的值,然后调用 layoutIfNeeded
。据我了解,手动更改 View 框架的值和自动布局不能混淆。
此外,我不会乱用 setTranslatesAutoresizingMaskIntoConstraints
,除非您以编程方式添加约束,在这种情况下,您很可能只是将其设置为 false
。
关于ios - 出现键盘时移动具有自动布局约束的文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30687731/