gpt4 book ai didi

ios - 出现键盘时更改约束 - Swift

转载 作者:可可西里 更新时间:2023-11-01 00:39:16 25 4
gpt4 key购买 nike

我的 UIView 在出现键盘时无法正常移动。我用来输入文本的 UIView 中有一个 UITextView。如果我选择 TextView 输入文本,键盘会出现,但 UIView 不会第一次移动。如果我点击背景并使键盘消失,然后再次点击 TextView,则 UIView 会正确向上移动。有谁知道这里发生了什么?

class ChatViewController: UIViewController, CNContactPickerDelegate, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource, UIToolbarDelegate, UITextFieldDelegate, UITextViewDelegate {

@IBOutlet weak var composeTextView: UITextView!

@IBOutlet weak var composeViewBottomConstraint: NSLayoutConstraint!

override func viewDidLoad() {
super.viewDidLoad()

composeTextView.delegate = self

}

func textViewDidBeginEditing(_ textView: UITextView) {

UIView.animate(withDuration: 0.5){
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: .UIKeyboardWillShow, object: nil)

}

self.view.layoutIfNeeded()


}

@objc func keyboardWillShow(notification: Notification) {
let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue

let keyboardHeight = keyboardSize?.height

if #available(iOS 11.0, *){

self.composeViewBottomConstraint.constant = keyboardHeight! - view.safeAreaInsets.bottom
}
else {
self.composeViewBottomConstraint.constant = view.safeAreaInsets.bottom
}
self.view.layoutIfNeeded()

}

}

最佳答案

问题是在第一次点击 textView 时 View 没有上升是因为在 beginEditing 中添加了 showKeyboard 观察器,所以这一行应该在 viewDidLoad

  NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: .UIKeyboardWillHide, object: nil)

除了以下修复

func textViewDidBeginEditing(_ textView: UITextView) {

// I think no need for it

}

@objc func keyboardWillShow(notification: Notification) {

let keyboardSize = (notification.userInfo? [UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue

let keyboardHeight = keyboardSize?.height

if #available(iOS 11.0, *){

self.composeViewBottomConstraint.constant = keyboardHeight! - view.safeAreaInsets.bottom
}
else {
self.composeViewBottomConstraint.constant = view.safeAreaInsets.bottom
}

UIView.animate(withDuration: 0.5){

self.view.layoutIfNeeded()

}


}

@objc func keyboardWillHide(notification: Notification){

self.composeViewBottomConstraint.constant = 0 // or change according to your logic

UIView.animate(withDuration: 0.5){

self.view.layoutIfNeeded()

}

}

关于ios - 出现键盘时更改约束 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49441226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com