5

Ho un'app a schede con un UISplitView in una delle schede.Perché ROTATEFromInterfaceOrientation in una categoria causa problemi con UISplitView?

Sto usando UITabBarController+iAds e ho un problema che il dev non è stato in grado di risolvere.

Purtroppo, questo è ciò che la mia interfaccia utente si presenta come sulla rotazione del iPad:

enter image description here enter image description here

La categoria è chiamata dall'interno AppDelegate e il seguente codice viene utilizzato per aggiornare la pubblicità quando il dispositivo è ruotata:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    NSLog(@"Did rotate"); 
    [self layoutBanner]; 
} 

da quanto ho capito, questo impedisce l'MasterViewController di funzionare correttamente, ma non capisco pienamente il principio alla base la cascata di chiamate di metodo per capire come risolvere questo problema.

+0

Cosa succede se non si chiama '[sé layoutBanner]' ? –

+0

I problemi appaiono ancora ma il banner pubblicitario non viene ricaricato. – Leon

risposta

7

Ecco cosa la Guida per gli sviluppatori Apple dice sul metodo didRotateFromInterfaceOrientation:

sottoclassi possono sovrascrivere questo metodo per eseguire ulteriori azioni subito dopo la rotazione.

...

L'implementazione di questo metodo deve chiamare eccellente ad un certo punto durante la sua esecuzione.

La mia ipotesi migliore è che alcune operazioni di disegno nella controller della vista non accade perché non si sta chiamando il metodo della superclasse dalla tua implementazione. Provare a risolvere il problema in questo modo:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; 
    NSLog(@"Did rotate"); 
    [self layoutBanner]; 
} 

UPDATE: Su iOS 8 questo metodo è deprecato e non è più chiamato quando il dispositivo viene ruotato. Invece è necessario utilizzare un nuovo metodo:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
    NSLog(@"Szie changed"); 
    [self layoutBanner]; 
} 
+0

Sono sicuro che ho provato questo e non ha funzionato. Tuttavia, non posso riprovare ciò da iOS 8 perché, per qualche motivo, non è stato chiamatoRotateFromInterfaceOrientation sui dispositivi iOS 8. Sembra essere un problema nelle categorie piuttosto che in ViewControllers. – Leon

+0

La ragione è che Apple lo ha reso deprecato in iOS 8. Ho aggiornato la mia risposta per riflettere questo. – Bedford

+0

Okay, ha funzionato e non presenta problemi negli screenshot. Ora ho solo bisogno di correggere il resto del codice. Grazie! – Leon