Настройте рамку представленного представления в UIPresentationController после презентации

Я использую пользовательский контроллер презентации, чтобы сделать что-то похожее на UIAlertView, Я хочу, чтобы он двигался вверх, когда показывает клавиатура. в UIKeyboardWillShowNotification обработчик, я беру новый кадр клавиатуры, сохраняю его в свойстве и затем вызываю:

self.presentedView.frame = [wself frameOfPresentedViewInContainerView];

В моей реализации -frameOfPresentedViewInContainerViewЯ принимаю во внимание текущую высоту клавиатуры.

Это работает отлично, но кажется немного грязным, чтобы изменить кадр self.presentedView непосредственно. Я попытался вызвать макет в представлении контейнера с различными перестановками setNeedsLayout а также layoutIfNeeded, но ничто не приводит к перемещению представленного представления, кроме простой установки его кадра.

Есть ли лучший способ сделать это, чем просто поменять кадр?

1 ответ

Вам необходимо обновить preferredContentSize вашего представленного ВК.

Контроллер презентации не знает, как и когда изменится макет представленного ВК после окончания презентации. Он знает только его размер и положение, необходимое для выполнения перехода.

Но у контроллера представления есть хороший метод делегата, унаследованный от UIContentContainer: preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer)

Итак, что вы должны сделать, это:

  1. В представленном ВК выполните все ваши изменения макета
  2. обязательно обновите представленный ВК preferredContentSize сразу после
  3. ваш контроллер презентации будет уведомлен
  4. вызвать проход макета containerView свойство вашего контроллера презентации
Другие вопросы по тегам