Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用自定义键盘时获得正确的键盘高度值-SWIFT 3_Ios_Swift_Keyboard_Constraints_Swift3 - Fatal编程技术网

Ios 使用自定义键盘时获得正确的键盘高度值-SWIFT 3

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

因此,我有一个UIButton,它位于UIView的底部,直到键盘出现,然后底部约束更新为键盘高度

这适用于iOS默认键盘,但当使用自定义键盘(如快捷键)时,底部约束仍然是iOS键盘高度的约束

我注意到一个自定义键盘会触发三个通知,而不是一个。这可能是个问题,但我如何使用正确的值呢

@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