UIPresentationController меняет размер, когда поверх него отображается другой контроллер представления

Я представляю модальный контроллер представления, используя UIPresentationController. Я устанавливаю фрейм представленного представления меньше, чем границы содержащего содержимого, используя следующий метод:

override func frameOfPresentedViewInContainerView() -> CGRect {
    let myDX = (self.containerView!.bounds.width - 600)/2
    let myDY = (self.containerView!.bounds.height - 600)/2
    return self.containerView!.bounds.insetBy(dx: myDX, dy: myDY)
}

Все отлично работает до этого момента.

Теперь, я представляю другой контроллер вида модально (по умолчанию не пользовательский) поверх текущего отображаемого контроллера модального вида, который занимает весь экран. Итак, у меня есть собственный контроллер модального вида под контроллером модального вида по умолчанию, который покрывает весь экран.

Проблема в том, что когда я отклоняю контроллер вида сверху, который покрывает весь экран, мой пользовательский контроллер вида также появляется, покрывая весь экран. Я хочу, чтобы размер моего собственного контроллера представления оставался тем же самым (меньшим, чем containerView). Есть ли способ, которым я могу достичь этого.

Любая помощь будет оценена

1 ответ

Решение

Я столкнулся с той же проблемой. Я не мог решить это, добавив ограничения, и -[UIPresentationController containerViewWillLayoutSubviews] вызывается слишком поздно (после завершения анимации отклонения).

Через некоторое время я понял, что проблема в том, что представляемое представление контроллера удаляется из иерархии представлений при представлении со значением по умолчанию. UIModalPresentationFullScreenpresentationStyle и добавлен снова с полноразмерным размером, когда он должен быть показан снова.

В iOS 8 вы можете использовать UIModalPresentationOverFullScreen как presentationStyle при представлении от меньшего контроллера. Система не будет автоматически удалять представление текущего контроллера. (-[UIViewController viewWillDisappear:] и тому подобное, при вызове этого не вызывается на действующем контроллере)

Вы также можете использовать UIModalPresentationCustom который доступен в iOS 7, но тогда вам придется предоставить собственную анимацию перехода.

Другие вопросы по тегам