当我点击文本字段时,键盘会出现,但它会覆盖文本字段,导致输入文本变得困难。 我尝试将视图控制器中的 adjustmentResize 设置为 true,但它似乎没有按预期工作。 我还尝试处理键盘通知并调整内容插图并滚动视图,但它没有给出所需的结果。
override func viewDidLoad() {
super.viewDidLoad()
// Other setup code...
// I've tried the following, but it doesn't solve the issue
self.view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
self.view.contentMode = .redraw
}
我希望在键盘出现时适当调整视图大小并滚动,确保文本字段保持可见且可访问。如何使用 Swift 在我的 iOS 应用程序中实现此行为?
解决iOS键盘无法调整视图大小和与文本字段重叠的问题。这对我有用
注册键盘通知
在 viewDidLoad 方法中,注册与键盘出现和消失相关的通知。
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
手柄键盘展示
实现keyboardWillShow方法来调整内容插入,并在即将显示键盘时滚动视图。
@objc private func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
let contentInsets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)
yourScrollView.contentInset = contentInsets
yourScrollView.scrollIndicatorInsets = contentInsets
}
}
手柄键盘隐藏
实现keyboardWillHide方法,在键盘即将隐藏时重置内容插入并滚动视图。
@objc private func keyboardWillHide(notification: NSNotification) {
let contentInsets = UIEdgeInsets.zero
yourScrollView.contentInset = contentInsets
yourScrollView.scrollIndicatorInsets = contentInsets
}
取消注册键盘通知
deinit {
NotificationCenter.default.removeObserver(self)
}
滚动到活动文本字段
此外,您可能需要滚动到活动文本字段以确保它在键盘出现时可见。
func scrollToActiveTextField() {
if let activeTextField = yourActiveTextField {
let visibleRect = CGRect(origin: activeTextField.frame.origin, size: CGSize(width: activeTextField.frame.width, height: activeTextField.frame.height + 20))
yourScrollView.scrollRectToVisible(visibleRect, animated: true)
}
}
当您检测到文本字段变为活动状态时,调用 scrollToActiveTextField()。