5

Sto presentando un controller di visualizzazione modale utilizzando UIPresentationController. Io pongo la cornice di presentedView inferiore a limiti del containView utilizzando il metodo seguente:UIPresentationController modifica le dimensioni quando su di esso viene visualizzato un altro controller di visualizzazione

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

Tutto funziona alla grande fino a questo punto.

Ora, presento un altro controller di vista modalmente (predefinito non personalizzato) sopra il controller della vista modale attualmente visualizzato che occupa l'intero schermo. Quindi, ho un controller di visualizzazione modale personalizzato sotto il controller di visualizzazione modale di default che copre l'intero schermo.

Il problema è quando ignoro il controller di vista superiore che copre l'intero schermo, il mio controller di visualizzazione personalizzato mostra anche l'intero schermo. Voglio che le dimensioni del mio controller di visualizzazione personalizzato rimangano invariate (più piccole di containerView). C'è un modo per raggiungerlo.

Qualsiasi aiuto sarebbe gradito

+0

Forse è possibile utilizzare autoLayout invece di hardcode le dimensioni della cornice? – Koen

risposta

10

Ho riscontrato lo stesso problema. Non ho potuto risolverlo aggiungendo vincoli e -[UIPresentationController containerViewWillLayoutSubviews] è chiamato troppo tardi (dopo che l'animazione di rimozione è stata completata).

Dopo un po 'di tempo ho capito che il problema sembra essere che la vista del controller di presentazione viene rimossa dalla gerarchia della vista quando si presenta con lo stile di presentazione a schermo intero predefinito e aggiunto di nuovo a schermo intero quando deve essere mostrato di nuovo

In iOS 8, è possibile utilizzare UIModalPresentationOverFullScreen come presentationStyle quando si presenta dal controller più piccolo. Il sistema non rimuoverà automaticamente la vista del controller che presenta. (-[UIViewController viewWillDisappear:] e così via, non viene chiamato sul controller di presentazione quando lo fai)

Puoi anche usare UIModalPresentationCustom che è disponibile in iOS 7, ma poi dovrai fornire la tua animazione di transizione.

Problemi correlati