私は2 UITextField
と1 UIButton
コンポーネントを持つxibのViewController(ログインビュー)を持っています。ビュー階層はテキストフィールドの選択時に、キーボードの表示高さを調整します
UIView
-> UIScrollView
-> UIView (contentView)
-> UITextField
-> UITextField
-> UIButton
です。私はビューにautolayoutを使用しています。 UIScrollViewは4つの拘束、すなわち先頭、末尾、上部は&、下部はそのスーパービュー(UIViewController
ビュー)に揃えられています。 ContentViewには、先頭、末尾、先頭が&のスーパービュー(UIScrollView)と幅一致UIViewController
ビューの4つの制約があります。
キーボードがUITextField
の上にならないようにUITextField
を選択すると、Apple documentationのようにスクロールして上下にスクロールしました。
キーボードが表示されているときスクロールアップがスクロールアップされていますが、キーボードが隠れているときスクロールビューはスクロールバックしません。どんな助けもありがとうございます。
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)
}
}
}
私はkeyboardWillBeHidden機能を提案ごとに変更しましたが、以前の位置に戻るscrollviewは表示されません。 – user2071152