2016-01-27 6 views
0

У меня есть 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, он движется всего несколько пикселей. Как мне изменить свой метод?

ответ

0

Изменение нижнего содержимогоInset не будет производить прокрутку прокрутки. Он устанавливает буфер внизу, поэтому, если вы прокрутите весь путь до конца, у него будет больше места для прокрутки.

Вы хотите изменить contentOffset scrollView и анимировать изменение contentOffset. Вы бы сделали примерно следующее:

var contentOffset = scrollView.contentOffset 
contentOffset.y = contentOffset.y + (however much you want it to move) 
scrollView.setContentOffset(contentOffset, animated: true) 

Это позволит ему прокручивать вверх и вниз в зависимости от выбранного текстового поля.

+0

Так что мне не нужен if-else, основанный на типе уведомления? – schoeberlt

+0

И сколько я должен его переместить? Возможно, клавиатураViewEndFrame.height или keyboardScreenEndFrame.height? – schoeberlt

+0

Это просто пример того, как/что изменять. Вам нужно будет сделать другое contentOffset для случая show and hide, так как вы, вероятно, хотите, чтобы состояние было другим. Я понятия не имею, сколько вы должны переместить, это зависит от того, что вы пытаетесь сделать. – DerailedLogic

Смежные вопросы