gpt4 book ai didi

ios - 出现键盘时向上移动 View

转载 作者:搜寻专家 更新时间:2023-10-31 23:08:19 24 4
gpt4 key购买 nike

问题:

我有一个 ViewController,它有一个带有 UIScrollView 的子类。

在 scrollView 中有 3 个 UITextField。其中 2 个带有 numberPad 键盘,1 个带有 UIPickerView 键盘。

问题是当键盘出现时,它隐藏了 UITextField。所以我要做的是在显示键盘时向上移动 UIViewController 的 View 。

我已经尝试过的:

我在 SO 上搜索了这个问题,找到了一些答案,基于它们我编写了这段代码:

override func viewDidLoad() {
super.viewDidLoad()

//Keyboard notifications
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}

//MARK: - keyboards

@objc fileprivate func keyboardWillShow(notification: Notification) {
self.changeViewOriginBasedOnKeyboardPosition(notification: notification)
}

@objc fileprivate func keyboardWillHide(notification: Notification) {
self.changeViewOriginBasedOnKeyboardPosition(notification: notification)
}

fileprivate func changeViewOriginBasedOnKeyboardPosition(notification: Notification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
let keyboardAnimationDuration = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! TimeInterval
UIView.animate(withDuration: keyboardAnimationDuration != 0 ? keyboardAnimationDuration : 0.2, animations: {
if self.controllerContentView.frame.origin.y == 0 {
self.controllerContentView.frame.origin.y = -keyboardSize.height
} else {
self.controllerContentView.frame.origin.y = 0
}
})
}
}

fileprivate func dismissKeyboard() {
self.view.endEditing(true)
}

//Touch handling

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.dismissKeyboard()
}

我尝试过的问题:

有时效果很好,但有时 View 会“跳”回来/“跳”下来,我不明白为什么。

有没有人发现我的代码有任何问题会导致这个错误?

谢谢!

最佳答案

我为此使用了一个名为 IQKeyboardManager 的 CocoaPod。

https://github.com/hackiftekhar/IQKeyboardManager

在全局范围内设置和工作非常简单。

关于ios - 出现键盘时向上移动 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47698632/

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