gpt4 book ai didi

ios - UIView 在显示键盘时出现,但在我开始键入时消失(快速)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:02:07 24 4
gpt4 key购买 nike

我有一个 UIView 容器,其中包含一个 UITextField 和两个 UIButtons(见下图)。

我写了一个 extension,它监听 UIKeyboardWillShow 通知并为 UIView 设置动画,以便它在显示时绑定(bind)到键盘。

这很完美,但只要我开始输入,UIView 就会再次消失。

扩展用法:

sendMessageView.bindToKeyboard()

UIView 扩展:

extension UIView {

func bindToKeyboard() {

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

}//end func

@objc func keyboardWillShow(notification: NSNotification) {

let duration = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! Double

let curve = notification.userInfo![UIKeyboardAnimationCurveUserInfoKey] as! UInt

let beginningFrame = (notification.userInfo![UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue

let endFrame = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue

let deltaY = endFrame.origin.y - beginningFrame.origin.y


UIView.animateKeyframes(withDuration: duration, delay: 0.0, options: UIViewKeyframeAnimationOptions(rawValue: curve), animations: {
self.frame.origin.y += deltaY
}, completion: nil)

}//end func

}//end extension

UIView 在显示时绑定(bind)到键盘:

enter image description here

输入时 UIView 消失(我怀疑在键盘后面到它原来的位置):

enter image description here

最佳答案

不要为 UIView 本身添加扩展名。只需将您的 textBox View 添加为 subview ,并将 View 的底部约束设置为根据键盘的高度进行更新。如果存在键盘,则将常量设置为键盘高度的负值,否则将其设置为零。

    private func setupView() {
NotificationCenter.default.addObserver(self, selector: #selector(keyBoardShown(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
self.view.backgroundColor = .white
self.view.addSubview(textInputView)
bottomConstraint = NSLayoutConstraint(item: textInputView, attribute: .bottom, relatedBy: .equal, toItem: view.safeAreaLayoutGuide, attribute: .bottom, multiplier: 1.0, constant: 0)
NSLayoutConstraint.activate([
//textBox.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0),
//textInputView.heightAnchor.constraint(equalToConstant: UIFont.systemFontSize+14+10),
textInputView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0),
textInputView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 0)
])
bottomConstraint.isActive = true
}

@objc private func keyBoardShown(_ notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
print(keyboardSize.height)
bottomConstraint.constant = -keyboardSize.height
UIView.animate(withDuration: 0.5,
delay: TimeInterval(0),
options: .beginFromCurrentState,
animations: { self.view.layoutIfNeeded() },
completion: nil)
}
}

关于ios - UIView 在显示键盘时出现,但在我开始键入时消失(快速)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51604788/

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