为了调整界面以适应 UITextField 或 UITextView 的键盘显示,您可以使用以下方法:
UIKeyboardWillShowNotification
和 UIKeyboardWillHideNotification
通知来监听键盘的显示和隐藏。UIScrollView
来包含您的输入控件,并在键盘显示时调整 contentInset
属性,以便在输入时不遮挡输入控件。以下是一个简单的示例代码:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func keyboardWillShow(notification: NSNotification) {
guard let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }
guard let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double else { return }
guard let curve = notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt else { return }
let insets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)
UIView.animate(withDuration: duration, delay: 0, options: UIView.AnimationOptions(rawValue: curve), animations: {
self.scrollView.contentInset = insets
self.scrollView.scrollIndicatorInsets = insets
}, completion: nil)
}
@objc func keyboardWillHide(notification: NSNotification) {
guard let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double else { return }
guard let curve = notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt else { return }
UIView.animate(withDuration: duration, delay: 0, options: UIView.AnimationOptions(rawValue: curve), animations: {
self.scrollView.contentInset = .zero
self.scrollView.scrollIndicatorInsets = .zero
}, completion: nil)
}
这段代码将监听键盘的显示和隐藏,并在键盘显示时调整 UIScrollView
的 contentInset
属性,以便在输入时不遮挡输入控件。当键盘隐藏时,将恢复 contentInset
的值。
领取专属 10元无门槛券
手把手带您无忧上云