ios - 出现键盘时移动具有自动布局约束的文本字段

标签 ios swift autolayout constraints

我有一个搜索栏文本字段和一个表格 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
}

enter image description here

解决方案代码

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/

相关文章:

ios - UIView subview 自动布局问题

ios - 覆盖 UIStackView 的间距

ios - 侧边菜单警告 : attempt to push a View Controller from where its navigationController == nil in swift

iphone - iOS Touches 开始

ios - Swift 使用没有泛型的动态类型引用创建类型数组

ios - 从单元格中的 super View 中删除 View

ios - 自动布局和约束的 ImageView 问题

ios - 测试应用程序内购买是否需要有效的付费应用程序契约(Contract)?

ios - JSONSerialization.jsonObject

xcode - 给定 XCTest UI 测试中的索引,如何验证 TableView 行内文本的存在?