Sto creando un'app per iPhone e ho bisogno che sia in modalità verticale, quindi se l'utente sposta il dispositivo lateralmente, non ruota automaticamente. Come posso fare questo?Come posso disabilitare l'orientamento orizzontale?
risposta
Per disabilitare gli orientamenti per un particolare controller di vista, ora è necessario sostituire supportedInterfaceOrientations
e preferredInterfaceOrientationForPresentation
.
- (NSUInteger) supportedInterfaceOrientations {
// Return a bitmask of supported orientations. If you need more,
// use bitwise or (see the commented return).
return UIInterfaceOrientationMaskPortrait;
// return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}
- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation {
// Return the orientation you'd prefer - this is what it launches to. The
// user can still rotate. You don't have to implement this method, in which
// case it launches in the current orientation
return UIInterfaceOrientationPortrait;
}
Se ci si rivolge qualcosa di più grande di iOS 6, si desidera che il metodo di shouldAutorotateToInterfaceOrientation:
. Cambiando quando ritorna sì, determinerai se ruoterà verso detto orientamento. Ciò consentirà solo il normale orientamento verticale.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
// Use this to allow upside down as well
//return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}
Nota che shouldAutorotateToInterfaceOrientation:
è stato deprecato in iOS 6.0.
La rimozione del metodo shouldAutorotateToInterfaceOrientation
dalla classe funziona anche perfettamente. Se non hai intenzione di ruotare, non ha senso avere il metodo nella tua classe, meno codice e meglio è, mantiene le cose pulite.
Questa risposta è ora obsoleta; 'shouldAutorotateToInterfaceOrientation' è stato deprecato per anni. –
@MarkAmery https://developer.apple.com/reference/uikit/uiviewcontroller/1621419-shouldautorotate non ha un avviso di deprecazione. –
@VaddadiKartick È anche un metodo diverso da quello menzionato in questa risposta; Non sono sicuro di quale sia il tuo punto. –
Xcode 4 e al di sotto
Per chi si fosse perso lo: è possibile utilizzare la schermata delle impostazioni di progetto per fissare orientamenti in tutta l'applicazione (non c'è bisogno di sostituire i metodi di ogni controller):
È semplice come alternare gli orientamenti dell'interfaccia supportati. Puoi trovarlo facendo clic sul tuo progetto nel riquadro di sinistra> obiettivo dell'app> scheda Riepilogo.
Questo è obsoleto; l'interfaccia utente è diversa ora. –
Xcode 5 e superiori
- Clicca il tuo progetto nel Navigatore progetto nella barra laterale sinistra per aprire le impostazioni del progetto
- andare alla scheda Generale.
- deselezionare le opzioni che non si desidera nella sezioneInformazioni Distribuzione, in Orientamento dispositivo
Non riesco a deselezionare Paesaggio sul mio. Li riavvia immediatamente. Inoltre, se li cancello da Info.plist, li rimette indietro. – Almo
Swift 3 Se si dispone di un navigationController, sottoclasse in questo modo (per il ritratto solo):
class CustomNavigationViewController: UINavigationController {
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.portrait
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return UIInterfaceOrientation.portrait
}
}
Se il contr vista oller è in un controller di navigazione, quindi il controller di navigazione è dove questi devono essere implementati. –
@MrRogers L'ho fatto, ma non funziona. Vedi http://pastebin.com/dLfLLP2j Ogni controller implementa correttamente le interfacce supportate. Il primo controller di visualizzazione viene visualizzato correttamente in verticale anche quando l'app viene avviata dal dispositivo nella schermata iniziale su iPhone Plus. Ma quando si passa a un altro controller, ruotare il dispositivo avanti e indietro per impostare l'altro controller in orizzontale e tornare indietro, il primo controller è ora in orizzontale. Quello che voglio è che il primo controller sia in verticale e il secondo sia tutto. –
Suggerisco di relazionare 'NSUinteger' da' supportedInterfaceOrientations' (prima riga di codice) a 'UIInterfaceOrientationMask'. Xcode 8 avverte riguardo a "Conflitto del tipo di ritorno nell'implementazione di 'supportedInterfaceOrientations': 'UIInterfaceOrientationMask' (noto anche come 'enum UIInterfaceOrientationMask') rispetto a 'NSUInteger' (alias 'unsigned long')" e rende sens. Grazie per la tua risposta – GabLeRoux