2013-10-02 15 views
7

Ho notato che quando passo a un controller Naviagtion, la barra di navigazione salta leggermente a destra dopo il completamento dell'animazione del flip.Altezza di UINavigationBar cambia dopo l'animazione del flip modale

Lo fa solo quando utilizzo un flip orizzontale seguito e non quando utilizzo l'animazione di diapositiva predefinita.

Ecco una GIF che ho fatto per illustrare il problema (mi dispiace per la dimensione minuscola!):

http://i.imgflip.com/3ym0y.gif

Prendere nota della barra Nav con il titolo "modale" - notarlo salta ~ 20 pixel dopo l'animazione.

L'esempio precedente è stato creato con un nuovo progetto - Non ho sottomesso UINavigationController o UINavigationBar. Ecco lo storyboard, in caso aiuta:

http://i.imgur.com/qFlK2oB.jpg

Che cosa mi manca?

risposta

20

Aggiungi questo al viewWillAppear nel controller che si sta presentando modale:

- (void)viewWillAppear:(BOOL)animated 
{ 
    // Workaround #1 for jumpy navbar 
    [self.navigationController.navigationBar.layer removeAllAnimations]; 
} 

E quando respinge il controller (quindi nello stesso controllore come sopra):

// Workaround #2 for jumpy navbar 
[UIView transitionWithView:self.navigationController.view 
        duration:0.75 
        options:UIViewAnimationOptionTransitionFlipFromLeft 
       animations:nil 
       completion:nil]; 
[self dismissViewControllerAnimated:YES completion:nil]; 

Vedi https://stackoverflow.com/a/19265558/254603

+0

Grazie amico, questo ha fatto il trucco! – Koonga

+0

Qualcuno può verificare che la durata dell'animazione di vibrazione predefinita sia effettivamente 0,75? Sembra che sia anche 1.0 o un numero di valori in quell'intervallo. Grazie! – James

Problemi correlati