使用建议栏获取键盘大小 swift
Get keyboard size with suggestion bar swift
在我的应用程序中,我需要在将其他组件移动到正确位置后获取键盘大小,现在我正在使用该代码获取高度
let info:NSDictionary = aNotification.userInfo! as NSDictionary
let kbSize:CGSize = (info.object(forKey: UIResponder.keyboardFrameEndUserInfoKey)! as AnyObject).cgRectValue.size
print(kbSize.height)
第一次打开键盘时结果是260.0,但这个值是默认大小,没有suggestions/passwords栏高,当我点击出来并再次点击输入时结果是304.0我想要的价值...
自第一次点击输入后如何获得 304?
您应该监听键盘大小的变化并以此方式调整其余内容,因为正如您发现的那样,iOS 键盘可以改变大小。您应该订阅 UIResponder.keyboardWillChangeFrameNotification
and/or UIResponder.keyboardDidChangeFrameNotification
这些通知会在键盘框架将要或已经更改时触发。下面是一个使用示例:
// Somewhere in set up code
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidChangeFrame),
name: UIResponder.keyboardDidChangeFrameNotification, object: nil)
// Function elsewhere in your class
@objc func keyboardDidChangeFrame(_ notification: Notification) {
guard let kbSize = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey]
as? CGRect else {
return;
}
// Use kbRect as you initially did
}
请注意,您可以使用 Will
或 Did
通知,具体取决于您希望布局更改的外观。您还可以同时查询 UIResponder.keyboardFrameBeginUserInfoKey
UIResponder.keyboardFrameEndUserInfoKey
以获取大小更改前后的键盘框架,如果您想将布局与键盘一起设置动画,这可能会很有用。
你可以试试这个;
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(UIResponder.keyboardWillShowNotification)
NotificationCenter.default.removeObserver(UIResponder.keyboardWillHideNotification)
NotificationCenter.default.removeObserver(UIResponder.keyboardWillChangeFrameNotification)
}
@objc func keyboardWillChange(notification: Notification) {
guard let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }
if notification.name == UIResponder.keyboardWillChangeFrameNotification || notification.name == UIResponder.keyboardWillShowNotification {
view.frame.origin.y = -keyboardSize.height
} else {
view.frame.origin.y = 0
}
}
}
这里是 Github gist
在我的应用程序中,我需要在将其他组件移动到正确位置后获取键盘大小,现在我正在使用该代码获取高度
let info:NSDictionary = aNotification.userInfo! as NSDictionary
let kbSize:CGSize = (info.object(forKey: UIResponder.keyboardFrameEndUserInfoKey)! as AnyObject).cgRectValue.size
print(kbSize.height)
第一次打开键盘时结果是260.0,但这个值是默认大小,没有suggestions/passwords栏高,当我点击出来并再次点击输入时结果是304.0我想要的价值... 自第一次点击输入后如何获得 304?
您应该监听键盘大小的变化并以此方式调整其余内容,因为正如您发现的那样,iOS 键盘可以改变大小。您应该订阅 UIResponder.keyboardWillChangeFrameNotification
and/or UIResponder.keyboardDidChangeFrameNotification
这些通知会在键盘框架将要或已经更改时触发。下面是一个使用示例:
// Somewhere in set up code
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidChangeFrame),
name: UIResponder.keyboardDidChangeFrameNotification, object: nil)
// Function elsewhere in your class
@objc func keyboardDidChangeFrame(_ notification: Notification) {
guard let kbSize = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey]
as? CGRect else {
return;
}
// Use kbRect as you initially did
}
请注意,您可以使用 Will
或 Did
通知,具体取决于您希望布局更改的外观。您还可以同时查询 UIResponder.keyboardFrameBeginUserInfoKey
UIResponder.keyboardFrameEndUserInfoKey
以获取大小更改前后的键盘框架,如果您想将布局与键盘一起设置动画,这可能会很有用。
你可以试试这个;
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(UIResponder.keyboardWillShowNotification)
NotificationCenter.default.removeObserver(UIResponder.keyboardWillHideNotification)
NotificationCenter.default.removeObserver(UIResponder.keyboardWillChangeFrameNotification)
}
@objc func keyboardWillChange(notification: Notification) {
guard let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }
if notification.name == UIResponder.keyboardWillChangeFrameNotification || notification.name == UIResponder.keyboardWillShowNotification {
view.frame.origin.y = -keyboardSize.height
} else {
view.frame.origin.y = 0
}
}
}
这里是 Github gist