簡體   English   中英

首次加載時鍵盤高度為0 - Swift

[英]Keyboard height giving 0 on first load - Swift

我正在嘗試使用以下代碼在鍵盤出現時向上移動視圖:

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的高度。 當我重新加載視圖時,它從那時起就完美地運行了。

在鍵盤實際打開之前,似乎我沒有獲得鍵盤高度,這對於第一次運行功能來說已經太晚了。

知道問題是什么嗎? 如果您想了解更多詳情,請與我們聯系。

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

適用於swift 3.0及以上版本

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

我正在使用這個

第一

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
    }
}

這是因為您在鍵盤顯示之前嘗試訪問keyboardHeight。

聽mp3DidShow( :)而不是keyboardWillShow( :),你將獲得正確的鍵盤高度。

改用它:

func keyboardDidShow(notification: NSNotification) {
if let keyboardSize: CGSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.size {
       //DO YOUR STUFF
} }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM