【发布时间】:2017-03-15 00:33:51
【问题描述】:
我在 xib 中有一个 ViewController(登录视图),它有 2 个 UITextField 和 1 个 UIButton 组件。视图层次结构是
UIView
-> UIScrollView
-> UIView (contentView)
-> UITextField
-> UITextField
-> UIButton
我正在为视图使用自动布局。 UIScrollView 有 4 个约束,即前导、尾随、顶部和底部与其父视图(UIViewController 视图)对齐。 ContentView 有 4 个约束,即其父视图 (UIScrollView) 的前导、尾随、顶部和底部以及宽度匹配 UIViewController 视图。
当用户选择UITextField 时,我已按照Apple documentation 中的步骤向上或向下滚动,以便键盘不在UITextField 之上。
当显示键盘时,scrollview 向上滚动,但当键盘隐藏时,scrollview 不会向后滚动。任何帮助表示赞赏。
override func viewDidLoad() {
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
func keyboardWillHide(notification: NSNotification) {
let contentInsets: UIEdgeInsets = UIEdgeInsets.zero
self.scrollView.contentInset = contentInsets
self.scrollView.scrollIndicatorInsets = contentInsets
}
func keyboardWillShow(notification: NSNotification) {
if let activeField = self.activeField, let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
let contentInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: keyboardSize.height, right: 0.0)
self.scrollView.contentInset = contentInsets
self.scrollView.scrollIndicatorInsets = contentInsets
var aRect = self.view.frame
aRect.size.height -= keyboardSize.size.height
if (!aRect.contains(activeField.frame.origin)) {
self.scrollView.scrollRectToVisible(activeField.frame, animated: true)
}
}
}
【问题讨论】:
标签: ios swift uiscrollview autolayout xib