2017-06-07 38 views
0

我想鍵盤出現時,移動視圖時,使用下面的代碼:鍵盤高度的第一負載給予0 - 斯威夫特

func keyboardWillShow(notification: NSNotification) { 
if let keyboardSize: CGSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size { 

      if self.view.frame.origin.y == 0{ 
       print("Keyboard height is: \(keyboardSize.height)") 

       let keyboardHeight = keyboardSize.height - (self.tabBarController?.tabBar.frame.height)! 
       self.view.frame.origin.y -= (keyboardHeight) 
       print("Keyboard height is: \(keyboardSize.height)") 

     } 
    } 
} 

第一次,一旦應用程序已經打開這個函數被調用,鍵盤高度填充爲0,這意味着視圖下降了tabBar的高度。當我重新加載視圖時,它從此完美起作用。

這似乎是我沒有得到鍵盤高度,直到鍵盤被實際打開,這對於第一次運行該功能來說已經太晚了。

任何想法是什麼問題?請讓我知道你是否想要更多的細節。

回答

4

使用UIKeyboardFrameEndUserInfoKey而不是UIKeyboardFrameBeginUserInfoKey,看看是否有幫助。

+0

謝謝丹尼爾。我也嘗試過,但似乎沒有區別。如果你認爲這會有所作爲,那麼這發生在TabViewController中? –

+0

爲我效勞 謝謝......! –

0

我用這

第一

var iskeyboard : Bool = false; 

作秀

func keyboardWillShow(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 

     if (!iskeyboard) 
     { 
      self.view.frame.origin.y -= keyboardSize.height 
     } 
     iskeyboard = true 

    } 
} 

爲隱藏

func keyboardWillHide(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 

     if (iskeyboard) 
     { 
      self.view.frame.origin.y += keyboardSize.height 
     } 
     iskeyboard = false 
    } 
} 
+0

感謝您的支持,但您的代碼仍然在發生同樣的情況。我無法在Stackoverflow的其他任何地方找到任何有關它的信息......非常混亂。 –

1

爲SWIFT 3.0以上

@objc private func keyboardWillShow(_ notification: Notification){ 
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue 
{ 
    print("keyboardSize.height = ",keyboardSize.height) 
} }