5

Przedstawiam kontroler widoku modalnego za pomocą UIPresentationController. Ustawiam ramkę prezentViewView poniżej granic funkcji containView za pomocą następującej metody:UIPresentationController zmienia rozmiar, gdy wyświetlany jest inny kontroler widoku.

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) 
} 

Wszystko działa doskonale do tego momentu.

Teraz przedstawiam inny kontroler widoku modalnie (domyślnie niestandardowy) na wierzchu aktualnie wyświetlanego kontrolera widoku modalnego, który zajmuje cały ekran. Tak, mam niestandardowy kontroler widoku modalnego pod domyślnym kontrolerem widoku modalnym, który obejmuje cały ekran.

Problem polega na tym, że odrzucając kontroler widoku od góry, który obejmuje cały ekran, mój kontroler widoku wyświetla się obejmujący cały ekran. Chcę, aby rozmiar niestandardowego kontrolera widoku pozostał taki sam (mniejszy niż containerView). Czy jest jakiś sposób, aby to osiągnąć?

Każda pomoc będzie mile widziane

+0

Może można użyć autoLayout zamiast hardcode wymiarów ramy? – Koen

Odpowiedz

10

I napotkał ten sam problem. Nie mogłem go rozwiązać, dodając ograniczenia, i -[UIPresentationController containerViewWillLayoutSubviews] jest nazywany zbyt późno (po zakończeniu animacji zamknięcia).

Po pewnym czasie zorientowałem się, że problem polega na tym, że widok przedstawiający kontroler jest usuwany z hierarchii widoku, gdy prezentowany jest domyślny styl prezentacji na pełnym ekranie i dodawany ponownie z pełnym rozmiarem ekranu, gdy musi pokaż ponownie.

W systemie iOS 8 można użyć UIModalPresentationOverFullScreen jako presentationStyle podczas prezentacji z mniejszego kontrolera. System nie usunie automatycznie widoku kontrolera prezentującego. (-[UIViewController viewWillDisappear:] i tym podobne, nie jest wywoływana na kontrolerze prezentującym, gdy to robisz).

Można również użyć UIModalPresentationCustom, który jest dostępny w systemie iOS 7, ale wtedy musisz podać własną animację przejścia.

Powiązane problemy