У меня есть ScrollView с ContentView, который имеет 5 UITextFields. Я реализовал adjustForKeyboard:Прокрутка UIScrollView при выборе верхнего UITextField
func adjustForKeyboard(notification: NSNotification) {
let userInfo = notification.userInfo!
let keyboardScreenEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
let keyboardViewEndFrame = view.convertRect(keyboardScreenEndFrame, fromView: view.window)
if notification.name == UIKeyboardWillHideNotification {
scrollView.contentInset = UIEdgeInsetsZero
} else {
scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardViewEndFrame.height, right: 0)
}
scrollView.scrollIndicatorInsets = scrollView.contentInset
}
Конечно я настроил наблюдателей:
override func viewWillAppear(animated: Bool) {
// Add observers for keyboard
let notificationCenter = NSNotificationCenter.defaultCenter()
notificationCenter.addObserver(self, selector: "adjustForKeyboard:", name: UIKeyboardWillHideNotification, object: nil)
notificationCenter.addObserver(self, selector: "adjustForKeyboard:", name: UIKeyboardWillChangeFrameNotification, object: nil)
}
Он отлично работает, когда я выбрать TextFields сверху вниз, но когда я выбираю верхний TextField, он движется всего несколько пикселей. Как мне изменить свой метод?
Так что мне не нужен if-else, основанный на типе уведомления? – schoeberlt
И сколько я должен его переместить? Возможно, клавиатураViewEndFrame.height или keyboardScreenEndFrame.height? – schoeberlt
Это просто пример того, как/что изменять. Вам нужно будет сделать другое contentOffset для случая show and hide, так как вы, вероятно, хотите, чтобы состояние было другим. Я понятия не имею, сколько вы должны переместить, это зависит от того, что вы пытаетесь сделать. – DerailedLogic