2015-09-25 4 views
17

Ho un UIViewController con il seguente codice:iOS 9 supportedInterfaceOrientations non funziona

- (BOOL) shouldAutorotate { 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationPortrait; 
} 

Non sto usando un UINavigationController. Quando viene visualizzato questo UIViewController, il dispositivo continuerà a ruotare in orizzontale. Mi rivolgo a iOS 9, qual è il problema qui?

+0

hai provato a fare lo stesso sulle impostazioni del progetto xcode? –

+0

prova a disabilitare il lanscape a sinistra, la modalità a destra in xcode e controlla solo la modalità verticale e vedi se funziona !!! –

+2

Ho altri UIViewControllers su cui voglio consentire la rotazione. Solo non questo specifico. Mi sono anche assicurato che questo UIViewController sia impostato sulla classe giusta nel mio storyboard. – Bryan

risposta

30

Quindi il problema era che avevo definito gli orientamenti consentiti in info.plist che apparentemente sovrascrive qualsiasi cosa tu faccia da qualsiasi altra parte del progetto.

Per correggere il problema, ho rimosso le voci da info.plist e le ho definite nelle impostazioni del progetto. Ora tutto funziona come previsto.

+0

Grazie! hai salvato la mia giornata Per la cronaca, ho avuto questo bug su iOS 9.0, ma sembra essere risolto su iOS 9.1 –

+2

Bryan, ho rimosso le voci dal file info.plist, ma non capisco cosa intendi definendole in il progetto? Ho ancora tutti i miei VC che cambiano orientamento. Anche se ho aggiunto i metodi al VC per prevenirlo (supportatoInterfaceOrientations, shouldAutoRotate, ecc.). Sto provando ad affrontare il blocco della modalità paesaggio alla volta, e ho bisogno di evitare la modalità orizzontale per i VC che richiedono un ampio refactoring. – stulevine

+0

Ho completamente salvato la mia giornata, grazie! L'eliminazione degli orientamenti dell'interfaccia supportati in Info.plist e quindi l'implementazione di shouldAutorotate e SupportInterfaceOrientations hanno risolto questo problema per me. – user2393462435

1

devo provare molte soluzioni, ma la risposta corretta con la soluzione di lavoro è:

iOS 8 e 9, non c'è bisogno di modificare Info.plist.

- (BOOL) shouldAutorotate { 
return NO; 
} 



- (UIInterfaceOrientationMask)supportedInterfaceOrientations { 
return (UIInterfaceOrientationPortrait | UIInterfaceOrientationPortraitUpsideDown); 
} 

possible orientation

UIInterfaceOrientationUnknown

L'orientamento del dispositivo non può essere determinato.

UIInterfaceOrientationPortrait

Il dispositivo è in modalità verticale, con il dispositivo tenuto in posizione verticale e il tasto home sul fondo.

UIInterfaceOrientationPortraitUpsideDown

Il dispositivo è in modalità verticale, ma a testa in giù, con il dispositivo tenuto in posizione verticale e il pulsante Home nella parte superiore.

UIInterfaceOrientationLandscapeLeft

Il dispositivo è in modalità orizzontale, con il dispositivo tenuto in posizione verticale e il tasto home sul lato sinistro.

UIInterfaceOrientationLandscapeRight

Il dispositivo è in modalità orizzontale, con il dispositivo tenuto in posizione verticale e il tasto home sul lato destro.

+3

È necessario restituire UIInterfaceOrientationMask, non UIInterfaceOrientation al supportedInterfaceOrientations (ad esempio UIInterfaceOrientationMaskPortrait) –

18

Non credo che la risposta di Bryan funzioni, poiché la modifica degli orientamenti nelle impostazioni del progetto cambia anche lo info.plist come @mrhangz ha commentato.

Se il problema è solo iOS9, è probabilmente a causa della nuova funzionalità di iOS9 in iPad chiamato Split view .La iOS9 abilitare Split view di default in particolare dispositivo iPad, vedere i documenti di Apple here.

enter image description here Il split view costretti vostra applicazione per supportare tutti gli orientamenti in tutta la vista una volta adoptted.So se si imposta tutti gli orientamenti supportare sia info.plist o indirizzare l'impostazione generale, e quindi split view è supportata di default, che ignorerà l'impostazione di orientamento anche se supportedInterfaceOrientations nel tuo viewController e supporta tutti gli orientamenti.

Come documento scritto, se hai selezionato Requires full screen nelle impostazioni di destinazione, la tua app non supporterà split view. Ora puoi controllare nuovamente gli orientamenti nel codice. enter image description here

+0

Questo funziona per me. Avevo bisogno di queste informazioni, non lo so. –

+0

Non ha funzionato per me. Ho '- (BOOL) shouldAutorotate' nel mio controller di visualizzazione, ma non viene mai chiamato, e ho 'Richiede schermo intero' selezionato. È sempre stato controllato per quanto ne so. –

+0

Utilizzando Xcode 9 e test su iPhoneX, vedo lo stesso problema. Gli override sembrano non avere alcun effetto ei suggerimenti sui mod plist e che richiedono lo schermo intero non influiscono sul risultato nei miei test. Le uniche cose che sembrano influenzare il risultato sono il blocco delle rotazioni nelle impostazioni che si applicano a tutta l'app. Chiedendosi se qualcuno ha trovato il "segreto" per ottenere questo lavoro, o è ancora un mistero. – bduhbya