出现键盘时,移动带有自动布局约束的文本字段

我有一个search栏文本字段和一个表格视图(谷歌自动完成),我想翻译时,键盘进入视图。 我成功地做到这一点,但是,我收到有关我的限制的警告/错误。 我在这个视图上通过故事板使用自动布局,并试图在显示/隐藏键盘之前/之后禁用/启用约束,但我仍然收到这些错误。 我没有正确禁用自动布局? 我遵循这个 SO响应中给出的内容。

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 } 

在这里输入图像说明

解决scheme代码

 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中创build@IBOutlet对约束的引用,然后改变这些约束的constant量值,然后调用layoutIfNeeded 。 据我所知,手动更改视图的框架和自动布局的值不要混合。

此外,我不会搞乱setTranslatesAutoresizingMaskIntoConstraints除非你以编程方式添加你的约束,在这种情况下,你很可能只是将其设置为false