【发布时间】:2018-02-14 16:45:58
【问题描述】:
我正在使用UIKeyboardFrameEndUserInfoKey 键获取键盘高度,如下所示:
let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.height
print(keyboardHeight)
如果我点击UITextView,键盘会出现并打印
258.0
然后我按⌘ + k,模拟器连接硬件键盘,因此模拟器上的软件键盘关闭。
如果我按⌘ + k 再次启动键盘,keyboardShow 通知会调用两次并打印
216.0
258.0
为什么键盘显示通知会被调用两次,为什么是216.0?
更新
这是我的整个代码。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(ViewController.keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
notificationCenter.addObserver(self, selector: #selector(ViewController.keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
@objc func keyboardWillShow(notification: NSNotification) {
let userInfo = notification.userInfo!
let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.height
print(keyboardHeight);
}
@objc func keyboardWillHide(notification: NSNotification) {
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
如果我多次按⌘ + k 会显示结果...
【问题讨论】:
-
如果您有自定义键盘,这很正常,您应该创建一个变量来跟踪和减去以获得正确的高度来移动您的视图
-
@Tj3n 什么是自定义键盘?我使用默认的模拟器设置,只是尝试删除除
English (U.S.)之外的所有键盘语言,但结果不会改变。 -
似乎在模拟器中有所不同?你可以用真机试试看,肯定和下面的答案是一样的结果
标签: ios swift xcode keyboard ios11