2010-04-22 3 views
8

Sto cercando di ottenere un'applicazione per iPhone che richiede pressoché ogni push o pop nello Stack controller Nav per cambiare l'orientamento.Forzatura modifiche interfaccia utente UIInterface su iPhone

Fondamentalmente la prima vista è ritratto, la seconda ripropone il terzo ritratto (Sì, so che questo non è l'ideale, ma questo è il design e devo implementarlo).

Sono stato attraverso vari consigli su qui ....
How do I detect a rotation on the iPhone without the device autorotating?
Force portrait orientation on pushing new view to UINavigationViewController
Is there a documented way to set the iPhone orientation?
Ma senza successo totale.

Impostazione di collegare contro 3.1.2 mia lettura degli articoli legati sopra sembra indicare che se la mia vista ritratto spinge una vista con

 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeRight)); 
} 
Poi allora che vista dovrebbero apparire ruotata al paesaggio. Quello che succede è che appare nella sua forma di ritratto "spezzato", quindi ruota correttamente mentre il dispositivo viene girato.

Se richiamo il controller nella vista verticale (che è appropriato dovrebbeAutoRotate ...) rimane nella visualizzazione orizzontale interrotta fino a quando il dispositivo non viene riportato all'orientamento verticale.

Ho anche provato a rimuovere tutti i messaggi shouldautorotate e invece a forzare la rotazione trasformando la vista. Questo tipo di opere, e ho capito che spostando la barra di stato (che è effettivamente nascosta nella mia applicazione) [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight; la tastiera apparirà con l'orientamento corretto quando desiderato.

Il problema con questo approccio è che la trasformazione della barra di stato è strana e brutta quando non si dispone di una barra di stato: un'ombra incombe sulla pagina ad ogni modifica.

Così. Cosa mi manca

1) Ho sbagliato a pensare che in 3.1.2 (o possibilmente prima) shouldAutorotateToInterfaceOrientation dovrebbe fornire l'orientamento desiderato semplicemente spingendo i controller?

2) C'è un altro modo per far apparire le tastiere con l'orientamento corretto.

3) sono le API non documentate chiama la strada da percorrere (per favore no)

risposta

4

non si dovrebbe usare [UIViewController shouldAutorotateToInterfaceOrientation:] per attivare un cambiamento di orientamento!; è lì solo per far sapere al sistema se sono consentite rotazioni automatiche. Dovresti comunque aggiornarlo per specificare l'orientamento consentito.

Se si desidera modificare l'orientamento quando viene visualizzata una determinata vista, è necessario chiamare [UIApplication setStatusBarOrientation:animated:] all'interno del metodo di sostituzione di [UIViewController viewWillAppear:] per ciascun controller di vista che impone un orientamento particolare. Ciò causerà un cambiamento quando una vista viene spinta nello stack e quando viene estratta. Assicurati di chiamare super nel metodo di sostituzione.

Questo è anche il posto giusto per modificare il modo in cui viene visualizzata la barra di stato, se è qualcosa che stai facendo.

+0

Non sono sicuro se c'è una differenza tra [UIApplication setStatusBarOreintation .... e [UIApplication sharedApplication] .statusBarOrientation ... Verificherò, altrimenti è quello che ho fatto, e sto soffrendo ombra della barra di stato che gira intorno.Nella vista orizzontale, utilizzo una trasformazione per mostrare inizialmente la vista in orizzontale. Se quindi autorizzo una vista orizzontale con shouldAutorotateToInterfaceOrientation, non verrà nuovamente attivata? Come faccio a sovrascriverlo? – Andiih

+0

Si noti che questo metodo è stato deprecato in iOS 9. – fullofsquirrels