Last active
August 14, 2023 06:44
-
-
Save kaaaaai/c4a71af2dd62c5a559e41b76e2d39a11 to your computer and use it in GitHub Desktop.
swift.UI.监听键盘高度变化
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MyViewController: UIViewController { | |
// This constraint ties an element at zero points from the bottom layout guide | |
@IBOutlet var keyboardHeightLayoutConstraint: NSLayoutConstraint? | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
NotificationCenter.default.addObserver(self, | |
selector: #selector(self.keyboardNotification(notification:)), | |
name: UIResponder.keyboardWillChangeFrameNotification, | |
object: nil) | |
} | |
deinit { | |
NotificationCenter.default.removeObserver(self) | |
} | |
@objc func keyboardNotification(notification: NSNotification) { | |
guard let userInfo = notification.userInfo else { return } | |
let endFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue | |
let endFrameY = endFrame?.origin.y ?? 0 | |
let duration:TimeInterval = (userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0 | |
let animationCurveRawNSN = userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? NSNumber | |
let animationCurveRaw = animationCurveRawNSN?.uintValue ?? UIView.AnimationOptions.curveEaseInOut.rawValue | |
let animationCurve:UIView.AnimationOptions = UIView.AnimationOptions(rawValue: animationCurveRaw) | |
if endFrameY >= UIScreen.main.bounds.size.height { | |
self.keyboardHeightLayoutConstraint?.constant = 0.0 | |
} else { | |
self.keyboardHeightLayoutConstraint?.constant = endFrame?.size.height ?? 0.0 | |
} | |
UIView.animate( | |
withDuration: duration, | |
delay: TimeInterval(0), | |
options: animationCurve, | |
animations: { self.view.layoutIfNeeded() }, | |
completion: nil) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment