Настройте рамку представленного представления в UIPresentationController после презентации
Я использую пользовательский контроллер презентации, чтобы сделать что-то похожее на UIAlertView
, Я хочу, чтобы он двигался вверх, когда показывает клавиатура. в UIKeyboardWillShowNotification
обработчик, я беру новый кадр клавиатуры, сохраняю его в свойстве и затем вызываю:
self.presentedView.frame = [wself frameOfPresentedViewInContainerView];
В моей реализации -frameOfPresentedViewInContainerView
Я принимаю во внимание текущую высоту клавиатуры.
Это работает отлично, но кажется немного грязным, чтобы изменить кадр self.presentedView
непосредственно. Я попытался вызвать макет в представлении контейнера с различными перестановками setNeedsLayout
а также layoutIfNeeded
, но ничто не приводит к перемещению представленного представления, кроме простой установки его кадра.
Есть ли лучший способ сделать это, чем просто поменять кадр?
1 ответ
Вам необходимо обновить preferredContentSize
вашего представленного ВК.
Контроллер презентации не знает, как и когда изменится макет представленного ВК после окончания презентации. Он знает только его размер и положение, необходимое для выполнения перехода.
Но у контроллера представления есть хороший метод делегата, унаследованный от UIContentContainer
: preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer)
Итак, что вы должны сделать, это:
- В представленном ВК выполните все ваши изменения макета
- обязательно обновите представленный ВК
preferredContentSize
сразу после - ваш контроллер презентации будет уведомлен
- вызвать проход макета
containerView
свойство вашего контроллера презентации