我有CommentViewController
。它嵌入在容器视图中。在此CommentViewController
中,有UITableView
来显示评论,UIView
包含UITextField
和UIButton
。包含这两个对象的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
}
}
这是故事板:
点按文字字段后会显示此结果。
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.
答案 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 *乘数+常数。 - >然后 常数必须加上