我正在尝试使用以下代码在键盘出现时向上移动视图:
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的高度。当我重新加载视图时,从那时起它就能很好地工作。
在键盘实际打开之前,似乎我没有达到键盘高度,这对于第一次运行功能来说已经太迟了。
知道问题是什么吗?如果您想了解更多详情,请与我们联系。
答案 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
} }