Ios 使用自定义键盘时获得正确的键盘高度值-SWIFT 3
因此,我有一个UIButton,它位于UIView的底部,直到键盘出现,然后底部约束更新为键盘高度 这适用于iOS默认键盘,但当使用自定义键盘(如快捷键)时,底部约束仍然是iOS键盘高度的约束 我注意到一个自定义键盘会触发三个通知,而不是一个。这可能是个问题,但我如何使用正确的值呢Ios 使用自定义键盘时获得正确的键盘高度值-SWIFT 3,ios,swift,keyboard,constraints,swift3,Ios,Swift,Keyboard,Constraints,Swift3,因此,我有一个UIButton,它位于UIView的底部,直到键盘出现,然后底部约束更新为键盘高度 这适用于iOS默认键盘,但当使用自定义键盘(如快捷键)时,底部约束仍然是iOS键盘高度的约束 我注意到一个自定义键盘会触发三个通知,而不是一个。这可能是个问题,但我如何使用正确的值呢 @IBOutlet weak var fieldBottomConstant: NSLayoutConstraint! var keyboardShowing = false var keyboardHeight
@IBOutlet weak var fieldBottomConstant: NSLayoutConstraint!
var keyboardShowing = false
var keyboardHeight: CGFloat = 0.0
func keyboardWillShow(_ n:Notification) {
self.keyboardShowing = true
if let keyboardSize = (n.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
// fieldBottomConstant.constant = keyboardSize.height
keyboardHeight = keyboardSize.height
}
fieldBottomConstant.constant = keyboardHeight
}
func keyboardWillHide(_ n:Notification) {
self.keyboardShowing = false
fieldBottomConstant.constant = 0
}
override func viewWillAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(AddViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(AddViewController.keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(AddViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(AddViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(AddViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardDidChangeFrame, object: nil)
}
更新
我添加了更多的通知以观察任何更改,旋转设备后,约束将更改为自定义键盘高度,但在首次加载键盘时仍不使用自定义键盘高度。您应该收听NSNotification.Name.UIKeyboardWillChangeFrame答案是使用
UIKeyboardFrameEndUserInfoKey