UIKeyboardWillShowNotification и UIAlert

Я использую UIKeyboardWillShowNotification для прокрутки представления вверх и вниз при вызове клавиатуры. Это работает хорошо по большей части. Тем не менее, клавиатура имеет кнопку Готово, которая может произвести UIAlert. Без UIAlert нет никаких проблем, но если UIAlert называется что-то странное происходит с scrollview, кажется, перестает работать, чтобы размер его становился меньше.

это код, который я использую:

    func adjustInsetForKeyboardShow(show: Bool, notification: NSNotification) {
    guard let value = notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue else { return }
    let keyboardFrame = value.CGRectValue()
    let adjustmentHeight = (CGRectGetHeight(keyboardFrame) + 70) * (show ? 1 : -1)


    scrollView.contentInset.bottom += adjustmentHeight
    //scrollView.scrollIndicatorInsets.bottom += adjustmentHeight
}

func keyboardWillShow(notification: NSNotification) {
    if keyboardVisible == false {
    adjustInsetForKeyboardShow(true, notification: notification)
    keyboardVisible = true
    }
}

func keyboardWillHide(notification: NSNotification) {
    adjustInsetForKeyboardShow(false, notification: notification)
    keyboardVisible = false
}

deinit {
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

затем на клавиатуре появляется кнопка со следующим кодом:

func displayAlert(title:String, message:String, view:UIViewController){
    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action) -> Void in
    }))
    view.presentViewController(alert, animated: true, completion: nil)
}

В результате выдается предупреждение, затем при нажатии кнопки OK scrollview прерывается.

Может кто-нибудь помочь? Дайте мне знать, если вам нужно больше кода

1 ответ

  1. Во-первых, я бы рекомендовал вам использовать представление таблицы вместо представления прокрутки, если это возможно. Во-вторых, я не знаю, тестировали ли вы, но эти уведомления вызываются несколько раз, и они не ведут себя так, как вы иногда ожидаете. Я не пробовал, но я предполагаю, что как только вы показываете UIAlert один из этих методов запускается, а затем ваш размер контента сходит с ума. Попробуйте установить точки останова и посмотреть, что происходит. Кроме того, попробуйте отклонить клавиатуру при возврате, а затем вызвать displayAlert(). Кроме того, из опыта этот метод deinit, где вы удаляете наблюдателей, не вызывается, когда вы идете с экрана, я не знаю, есть ли у вас причина для его использования или? Лучше использовать методы viewWillAppear, viewWillDissapear.