2010-09-23 15 views
6

Ho la mia vista impostata su viewDidLoad. Tutti i diversi frame e tali dei sottoview sono stati definiti relativamente a self.view. Pertanto, non importa quale sia la dimensione self.view, le sottoview si restringeranno o si espanderanno sempre per adattarsi (per così dire).visualizzazione "Aggiorna" sulla rotazione del dispositivo

Così quando ruoto il mio dispositivo voglio ruotare la vista (abbastanza facile con shouldAutoRotateToInterfaceOrientation:...) ma le subviews mantengono la stessa forma.

Chiamare [self viewDidLoad]; rende tutti gli elementi adatti, ma inserisce un nuovo livello sopra il layout precedente (che è ovvio ... ma sto solo dicendo di spiegare cosa intendo).

C'è un modo per aggiornare i frame delle sottoview o qualcosa del genere? Non so cosa facciano gli altri per essere onesti. Dovrò inserire TUTTE le mie viste nel file .h come proprietà e fare tutto manualmente su didRotate...?

risposta

6

Sono disponibili tre opzioni:

  1. Se maschere ridimensionamento automatico sono abbastanza buone per posizionare le vostre opinioni, assegnare la maschera il ridimensionamento automatico corretto per ogni visualizzazione secondaria quando li si crea.

  2. Se le maschere di autoresizing non sono sufficienti, ignorare willAnimateRotationToInterfaceOrientation:duration: e riposizionare le visualizzazioni secondarie in tale metodo. Creerei un metodo personalizzato che prende l'orientamento come parametro ed è responsabile della disposizione di tutte le sottoview. È quindi possibile chiamare questo metodo da willAnimateRotationToInterfaceOrientation:duration: e da viewDidLoad.

  3. È inoltre possibile creare una sottoclasse personalizzata UIView e rendere la vista del controller di visualizzazione un'istanza di questa classe. Quindi eseguire l'override di layoutSubviews per posizionare tutte le visualizzazioni secondarie in base alle dimensioni della vista. Questo approccio implica che la vista personalizzata gestisca le sue sottoview anziché il controller della vista.

+0

grazie ... ha esaminato le maschere autoresizing :) che dovrebbe fare per ora. :) –

+0

Solo per aggiungere: se stai scrivendo il tuo controller di contenimento UIView. Puoi ignorare 'willLayoutSubviews:' e 'didLayoutSubviews:' per ricevere una notifica quando il dispositivo sta girando. –

Problemi correlati