我花了將近一天的時間嘗試了各種文章和教程中的許多不同方法,但是我一直無法完全工作解決我的問題。 (它讓我略微瘋狂)iOS/Swift - 無法在第一次使用鍵盤外觀時移動視圖
編輯文本字段時,彈出鍵盤,視圖隨鍵盤向上移動。然而,這隻會在應用程序重新啓動後第一次編輯文本字段。鍵盤會隨着視圖上任何其他位置的視圖而消失。 下一次編輯文本字段時,鍵盤會向上移動,但視圖不會,並且文本字段位於鍵盤下方。
這裏是我當前的代碼:
override func viewDidLoad() {
super.viewDidLoad()
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
override func viewWillAppear(_ animated: Bool) {
super.viewDidAppear(animated)
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)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
func dismissKeyboard() {
view.endEditing(true)
}
func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y == 0{
self.view.frame.origin.y -= keyboardSize.height
}
}
}
func keyboardWillHide(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y != 0{
self.view.frame.origin.y += keyboardSize.height
}
}
}
預先感謝您的任何幫助,您可以提供。
您是否嘗試將每個UI元素放在一個視圖中並更改該視圖的約束?更改視圖控制器的視圖不是很好的做法。 – Emre
@Emre嗨,我已經添加了一個子視圖,然後在代碼中引用了所有內容,但是同樣的事情發生了,視圖在第一次編輯文本框時移動,但第二個文本框使視圖恢復正常,鍵盤下的textfields。 –
我想你正在用Storyboard和AutoLayout創建你的視圖。只需創建一個約束容器視圖底部的IBOutlet,並在您的方法中更改它,而不是框架。 – Emre