首次加载时键盘高度为0 - Swift

时间:2017-06-07 20:43:58

标签: ios swift keyboard

我正在尝试使用以下代码在键盘出现时向上移动视图:

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 个答案:

答案 0 :(得分:8)

使用UIKeyboardFrameEndUserInfoKey代替UIKeyboardFrameBeginUserInfoKey,看看是否有帮助。

答案 1 :(得分:1)

  

对于swift 3.0及以上版本

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

答案 2 :(得分:0)

我正在使用此

首先

var iskeyboard : Bool = false;

for show

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

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

    }
}

for hide

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

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

答案 3 :(得分:0)

这是因为您在键盘显示之前尝试访问keyboardHeight。

收听keyboardDidShow( :)而不是keyboardWillShow( :),您将获得正确的键盘高度。

改为使用:

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