5

sto cercando di andare da un viewcontroller che supporta paesaggio (mentre in modalità orizzontale), a uno che non lo fa in modo esplicito (e non dovrebbe) paesaggio supporto. Sto facendo questo come segue:Problema pushViewController da orizzontale a verticale

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait); 
} 

Idealmente voglio il nuovo viewController che sto spingendo nello stack per cominciare inizialmente in verticale, non orizzontale. Stranamente anche con questo metodo implementato, inizia in Landscape.

La mia unica ipotesi è che Apple non desideri che un utente passi da un ritratto all'altro (nonostante ci consenta di passare da un paesaggio a un precedente controller in verticale).

Eventuali approfondimenti e/o aiuto sarebbero molto apprezzati.

risposta

10

Ho trovato un modo per forzare il ritratto. È un po 'un trucco, ma eccolo qui. Nel - (void) viewDidLoad del viewController che si vuole forzare ritratto per effettuare le seguenti operazioni:

UIViewController *viewController = [[UIViewController alloc] init]; 
[self presentModalViewController:viewController animated:NO]; 
[self dismissModalViewControllerAnimated:NO]; 
[viewController release]; 

Questo costringe fondamentalmente ritratto, con la presentazione di un controller (che supporta solo ritratto di default).

+0

Questo mi ha permesso di passare dalla visualizzazione solo verticale a quella solo orizzontale tramite pushViewController. Salva la necessità di chiamare API private non documentate [[UIDevice currentDevice] setOrientation: UIDeviceOrientationLandscapeRight] Grazie! – MyCSharpCorner

+0

bel trucco ... è diventato molto utile ... :) – Roshit

4

Sarà necessario presentare il nuovo controller di visualizzazione in modo modale. Se il controller della vista esiste all'interno di un controller di navigazione, l'orientamento di tutti i controller della vista nella pila di navigazione è implicito dal controller della vista radice nello stack. Qualunque sia il tuo controller di visualizzazione di root nello stack di nav restituito da shouldAutoRotateToInterfaceOrientation viene quindi utilizzato per tutti i controller di visualizzazione sottostanti.

+0

Ah capisco, questo è quello che ho pensato fosse il caso. Grazie per il chiarimento! – Sahil

1

La risposta di Sahil sopra è obsoleta da iOS 6.0. Tuttavia, il seguente sembra fare lo stesso trucco:

UIViewController *viewController = [[UIViewController alloc] init]; 
[self presentViewController:viewController animated:NO completion:nil]; 
[self dismissViewControllerAnimated:NO completion:nil]; 
[viewController release]; 
Problemi correlati