繁体   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