8

sto permettermi di fare questa domanda perché dopo ampia ricerca quasi due giorni di Googling, Catasta Traboccante, ecc ...iOS in-call aggiornamento barra di stato viewcontroller presentato modaly sullo schermo

Il mio problema è questo: I' m presentando ViewController dal mio ViewController principale in questo modo:

UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:VController]; 
navigation.transitioningDelegate = self; 
navigation.modalPresentationStyle = UIModalPresentationCustom; 

[self presentViewController:navigation 
        animated:YES 
       completion:nil]; 

ogni volta che un utente iPhone è in chiamata, oppure usa il proprio telefono come un hotspot, barra di stato viene ingrandita spingendo la mia modaly presentato VC fino in fondo, ma la l'origine è impostata su (0; 0) Il problema si verifica quando l'utente termina la chiamata durante il suo ridimensionamento della barra di stato della mia applicazione dimensione ma VC modale non si spostava.

enter image description here

ho saputo di questo quando è successo in codice grazie a questa notifica:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statuBarChange:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; 

La cosa peggiore è che i telai sono corect e l'origine sono ancora (0,0)

c'è un modo per aggiornare il modale presentato vc? con fuori dissidio e presentandolo di nuovo?

+0

Perché votare giù? Ho scritto questa domanda per trovare e rispondere. Non c'è nulla di simile nel comportamento presentato modale VC e barra di stato inCall. Se votate, spiegate perché, quindi posso collegarmi ad esso. – Shial

risposta

0

Hai davvero bisogno di una transizione personalizzata per questa modale? Altrimenti, rimuovi la riga "navigation.modalPresentationStyle = UIModalPresentationCustom" e sei a posto.

Se è necessario uno stile personalizzato, si tratta di un bug noto con lo stile UIModalPresentationCustom in iOS 8+ e la barra di stato. AFAIK, dovrai aggirarlo con AnimateTransition e spingere le cornici nei posti giusti.

C'è anche un attacco terribile per questo utilizzando willChangeStatusBarFrame nel delegato app di seguito. Puoi migliorarlo rilevando se c'è effettivamente un modal up e animando il cambiamento.

- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame 
{ 
    if (newStatusBarFrame.size.height < 40) { 
     for (UIView *view in self.window.subviews) { 
      view.frame = self.window.bounds; 
     } 
    } 
} 

Un'altra alternativa è quella di fare la copertina modale la barra di stato, e sovrascrivere prefersStatusBarHidden per questo controller della vista.

Odio tutte queste soluzioni, ma dovrebbe darti qualcosa di lavorabile a seconda di come è stato impostato il tuo progetto, e se non puoi ignorare quel poco spazio per una finestra di dialogo modale temporanea.

Problemi correlati