2017-10-17 10 views
1

我花了將近一天的時間嘗試了各種文章和教程中的許多不同方法,但是我一直無法完全工作解決我的問題。 (它讓我略微瘋狂)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 
      } 
     } 
    } 

預先感謝您的任何幫助,您可以提供。

+1

您是否嘗試將每個UI元素放在一個視圖中並更改該視圖的約束?更改視圖控制器的視圖不是很好的做法。 – Emre

+0

@Emre嗨,我已經添加了一個子視圖,然後在代碼中引用了所有內容,但是同樣的事情發生了,視圖在第一次編輯文本框時移動,但第二個文本框使視圖恢復正常,鍵盤下的textfields。 –

+0

我想你正在用Storyboard和AutoLayout創建你的視圖。只需創建一個約束容器視圖底部的IBOutlet,並在您的方法中更改它,而不是框架。 – Emre

回答

0

你應該在項目中使用IQKeyboardManagerSwift可可豆莢它會解決你的問題 你可以在這裏找到庫:https://github.com/hackiftekhar/IQKeyboardManager

,並根據發出的指示使用它。

Thanx!

+0

是的,我試過了,但它壓扁了我的視野,所以textfields超級小。我經歷了他們網站上的各種指令,但他們都沒有產生正確的結果 –

+0

您在刪除UITapGestureRecognizer和NotificationsCenters後嘗試這樣做? – Zee

+0

是的,我評論了所有這些,但視圖被壓扁,當我將其更改爲scrollView時,視圖根本不會移動。也嘗試將底層設置爲IQ約束,但我無法讓它工作。 –

0

將UIKeyboardFrameBeginUserInfoKey更改爲UIKeyboardFrameEndUserInfoKey。我剛剛測試過它,它工作。

相關問題