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]
вызывается слишком поздно (после завершения анимации отклонения).
Через некоторое время я понял, что проблема в том, что представляемое представление контроллера удаляется из иерархии представлений при представлении со значением по умолчанию. UIModalPresentationFullScreen
presentationStyle
и добавлен снова с полноразмерным размером, когда он должен быть показан снова.
В iOS 8 вы можете использовать UIModalPresentationOverFullScreen
как presentationStyle
при представлении от меньшего контроллера. Система не будет автоматически удалять представление текущего контроллера. (-[UIViewController viewWillDisappear:]
и тому подобное, при вызове этого не вызывается на действующем контроллере)
Вы также можете использовать UIModalPresentationCustom
который доступен в iOS 7, но тогда вам придется предоставить собственную анимацию перехода.