动画约束推动UIView上面的键盘问题

时间:2018-06-04 10:42:57

标签: swift uiview nslayoutconstraint uiviewanimation nsnotificationcenter

我有CommentViewController。它嵌入在容器视图中。在此CommentViewController中,有UITableView来显示评论,UIView包含UITextFieldUIButton。包含这两个对象的UIView通过自动布局在底部,左侧和左侧固定到安全区域,顶部固定到UITableView

现在,当用户点击UITextField时,整个视图(内部有按钮和文本字段)应该提升到键盘上方。我试图动画视图的底部约束,但它不起作用。

这是代码:

override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)

}

@objc func keyboardWillShow(_ notification: NSNotification) {
    let keyboardFrame = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue
    UIView.animate(withDuration: 0.3) {
        self.textFieldViewBottomConstraint.constant = keyboardFrame!.height
    }
}

这是故事板:

enter image description here

点按文字字段后会显示此结果。

enter image description here

PS:当我点击UITextField时,控制台会显示以下消息:

2018-06-04 14:11:52.471848+0300 AppName[91846:8829073] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /Users/d/Library/Developer/CoreSimulator/Devices/C89347A2-1598-4F31-BBAC-1F98F970A248/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles 2018-06-04 14:11:52.472588+0300 Shippers[91846:8829073] [MC] Reading from private effective user settings.

1 个答案:

答案 0 :(得分:3)

您需要在更改约束的常量

后调用self.view.layoutIfNeeded()
self.textFieldViewBottomConstraint.constant = keyboardFrame!.height
   UIView.animate(withDuration: 0.3) {
    self.view.layoutIfNeeded()
}

//

 NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)

修改

设置底部约束的常量属性取决于哪个元素是约束中的第一个元素,因此如果约束看起来像这样

这里的textfield是第一个

  

textfield_Bottom = view_Bottom * multiplier + constant。 - >然后   恒定必须是负数,因为Y轴减去时我们正在上升   想要在显示键盘时使视图上升

这里视图是第一个

  

view_Bottom = textfield_Bottom *乘数+常数。 - >然后   常数必须加上