25

Se scorri un po 'in questo Apple Developer Page troverai la sezione "Creazione di un'interfaccia orizzontale alternativa". L'approccio di base descritto è quello di presentare un file NIB diverso come vista modale quando l'orientamento cambia. Sto usando la funzione Storyboard, quindi non ho NIB. Come posso caricare una "scena" diversa in quel caso?iPhone Storyboard: diverse scene per verticale e orizzontale

Oltre a questo, sto usando un controller Tab Bar, non voglio mostrare una vista modale. Voglio solo sostituire la vista verticale attuale con una vista orizzontale progettata con il generatore di interfacce e mantenere la mia barra delle linguette. Quale sarebbe il modo Storyboard per realizzare l'attività "Creazione di un'interfaccia orizzontale alternativa"? Grazie.

risposta

19

Quando si aggiunge un controller di visualizzazione allo storyboard viene fornito con una vista. Chiama la vista del contenitore. Aggiungi due viste alla vista contenitore: una vista verticale e una vista orizzontale. Imposta le dimensioni della vista verticale e orizzontale in modo appropriato utilizzando la finestra di ispezione dimensioni. Aggiungi pulsanti, più viste, etichette o qualsiasi altra cosa alle viste verticale e orizzontale necessarie per la tua applicazione. Quindi quando l'orientamento cambia nasconde una vista e mostra l'altra.

+1

approccio interessante. Ci proveremo. Grazie – Korbi

+5

Cosa succede se usi IBOutlet, quelli possono essere assegnati solo a una vista. – Paranaix

+1

@Paranaix Potrei non capire completamente il tuo commento. La domanda originale pone l'esigenza di avere interfacce diverse per la modalità orizzontale e verticale. Se stai cercando un layout diverso per la stessa interfaccia, si tratta di un problema diverso. Forse dovresti porre una domanda completamente nuova. –

2

È possibile impostare un controller di navigazione e una vista principale. Quindi puoi utilizzare una vista modello per i layout verticale e orizzontale (2 visualizzazioni aggiuntive).

Sarà necessario impostare i controlli sulla vista principale e assicurarsi che ognuno abbia un tag univoco. La tua vista principale non verrà utilizzata, ma copierai i controlli nelle due viste del modello e li imposterai in base a come vuoi che ogni vista sia vista. Il vantaggio di ciò è che ciascuna vista conserverà il proprio tag che diventa un elemento molto importante di questa implementazione.

In questo modo si utilizza un approccio ibrido per quanto riguarda la scrittura di alcuni codici UI e l'utilizzo di Interface Builder. Dopo aver ottenuto la configurazione dei due modelli, crea un identificativo univoco per ognuno. Dovrai scrivere una logica per gestire la vista e le sue sottoview. Un metodo ricorsivo per restituire una raccolta di questi in base al modello scelto.

La logica di base nell'implementazione del controller di visualizzazione radice dovrà controllare isPortrait e in base a ciò sarà necessario caricare la vista corretta in base all'identificatore.

Sperimenta con questo concetto e verifica se funziona per te. I principali vantaggi di non utilizzare due viste separate con controlli univoci (non l'approccio condiviso con gli stessi tag) è che si mantenga l'accesso ai subview degli originali. Qualsiasi variabile di istanza definita nel controller della vista che punta a un testo archiviato, un'etichetta, ecc ... continua a farlo indipendentemente dalla vista del modello utilizzata. Ciò mantiene il modello, la vista, l'approccio del controllore man mano che la struttura dei dati rimane invariata.

Utilizzando questo approccio è ancora possibile ottimizzare l'utilizzo del generatore di interfacce e layout dei modelli per ogni vista, pur avendo la flessibilità di scrivere un codice UI personalizzato, se lo si desidera. L'utilizzo del solo builder di interfacce può essere un po 'limitativo a volte e scrivere un codice personalizzato basato sull'orientamento ti blocca in un po' di noioso lavoro.

Spero che questo aiuti alcuni.

0

È possibile creare un file xib contenente 2 visualizzazioni, un ritratto anteriore e uno per il paesaggio. Assegna come proprietario del file dello xib, lo stesso controller di vista della vista che hai nello storyboard. In viewDidLoad carica il file xib e aggiunge la vista appropriata per verticale o orizzontale.

Quindi, se si dispone di uno storyboard con molti viewcontrollers, è possibile impostare le due possibilità (verticale o orizzontale) solo nei viewcontrollers a cui si desidera modificare l'orientamento.

Ho usato questa soluzione e funziona molto bene!

Problemi correlati