如何在iOS swift中检测键盘高度变化或键盘更改?
请参阅下面的代码,它在文本键盘和Emojis键盘中显示非常小的一行:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardHideNShow(_:)), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardHideNShow(_:)), name: UIKeyboardWillHideNotification, object: nil)
var didDisplayedKeyboard:Bool = false
func keyboardHideNShow(notification:NSNotification) {
var movement: CGFloat = 0.0
let userInfo:NSDictionary = notification.userInfo!
let keyboardFrame:NSValue = userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as! NSValue
let keyboardRectangle = keyboardFrame.CGRectValue()
let movementDuration:NSTimeInterval = 0.3
UIView.beginAnimations( "animateView", context: nil)
UIView.setAnimationBeginsFromCurrentState(true)
UIView.setAnimationDuration(movementDuration )
if notification.name == UIKeyboardWillShowNotification {
// Do the operation only if its hide n show or show n hide
// When the keyboard switches from text to emoji, it wont hide the previous keyboard. will just replace
// In that case we need to avoid the keyboard movement
if didDisplayedKeyboard == false {
movement = -keyboardRectangle.height
didDisplayedKeyboard = true
print("m\(movement)")
self.view.frame = CGRectOffset(self.view.frame, 0, movement)
}
} else if notification.name == UIKeyboardWillHideNotification {
movement = keyboardRectangle.height
didDisplayedKeyboard = false
self.view.frame = CGRectOffset(self.view.frame, 0, movement)
}
UIView.commitAnimations()
}
如何调整视图?
答案 0 :(得分:5)
使用UIKeyboardWillChangeFrameNotification
这样的通知:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardWillChangeFrame(_:)), name: UIKeyboardWillChangeFrameNotification, object: nil)
接收更改为:
func keyboardWillChangeFrame(notification: NSNotification) {
if let keyboardFrame = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue() {
let keyboardHeight = keyboardFrame.size.height
print("keyboard height: \(keyboardHeight)")
//do the chnages according ot this height
}
}
当键盘出现时,此通知将为我们提供键盘框架矩形,更改为表情符号,显示/隐藏预测!
答案 1 :(得分:1)
快捷键4:
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChangeFrame), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
然后,您可以对键盘框架执行以下操作:
@objc func keyboardWillChangeFrame(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardHeight = keyboardFrame.cgRectValue.size.height
// Do something...
}
}
答案 2 :(得分:0)
Swift 5 :
NotificationCenter.default.addObserver(self, selector: #selector(_KeyboardHeightChanged(_:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
,然后像这样更改视图底部约束:
@objc private func _KeyboardHeightChanged(_ notification: Notification){
if let frame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue{
UIView.animate(withDuration: 0.5, animations: {
self.SampleViewBottomConstaint.constant == 0 ? (self.SampleViewBottomConstaint.constant = frame.cgRectValue.height) : (self.SampleViewBottomConstaint.constant = 0)
})
}
}