2011-10-18 17 views
5

Ho diversi UIViewControllers, caricati tramite un UINavigationController, dove sovrascrivo loadView e imposto una visualizzazione personalizzata da visualizzare. Ho problemi con l'impostazione dei fotogrammi di alcune delle sotto-visualizzazioni e forse la vista stessa. Penso che UINavigationController o UIViewController sia in grado di forzare la sua vista a riempire lo schermo quando viene visualizzato.UIViewController o UINavigationController impostano le dimensioni della vista?

Mi chiedo se e/o quando è impostata la dimensione della vista. E se sta accadendo, sta impostando la cornice della vista, o facendolo in un altro modo.

Grazie.

Aggiornamento: ho appena notato mentre si lavora con questo è che faccio un nuovo UINavigationController, con questo metodo loadview:

- (void)loadView 
{ 
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 10.0f, 10.0f)]; 
    [view setBackgroundColor:[UIColor redColor]]; 
    self.view = view; 
    [view release]; 
} 

ottengo una vista rosso occupare l'intero schermo, fatta eccezione per lo stato di barra e intestazione. Quando la mia vista viene ridimensionata per riempire lo schermo? E che taglia dovrei usare quando creo la vista?

risposta

3

Lo spazio di frame per UIViewControllers diventa più piccolo, poiché UINavigationController manipola la vista aggiungendo un UINavigationBar, che ha una dimensione di 44.0f.

Viene ridimensionato perché si sostituisce la vista con self.view = view; Se invece si fosse usato addSubview:, sarebbe rimasta la sua dimensione originale. logancautrell ha spiegato quando e perché.

+0

Grazie, per il chiarimento. Quando si carica la mia vista in una vista di controllo loadView, quando viene spinto tramite un UINavigationController, devo semplicemente impostare il frame come CGRectMake (0.0, 0.0, 320.0, 416.0)? Come in Non ho bisogno di compensare la coordinata dell'origine del telaio per UINavigationBar o la barra di stato? – Ryan

+0

La parte inferiore della barra di navigazione diventa la nuova origine X, Y per i controllori di vista, è sufficiente compensare l'altezza regolata. Per essere sicuri delle dimensioni, utilizzare 'NSLog (@" wxh =% fx% f ", self.view.frame.size.width, self.view.frame.size.height);' – Wolfert

+0

Grazie, che lo chiarisce per me. Mi sto ancora chiedendo quando la vista viene cambiata. Perché anche se imposto la dimensione errata in loadView viene modificata in modo che sia la dimensione corretta. Accetterò la tua risposta, poiché mi fa andare avanti. Grazie ancora. – Ryan

9

UINavigationController ridimensiona automaticamente una vista di ViewController quando viene spinto. Dalla documentazione:

pushViewController: animato:

L'oggetto nel parametro viewController diventa il controllore vista dall'alto in pila navigazione. Premendo un controller della vista si ottiene la visualizzazione della vista che gestisce. Il modo in cui viene visualizzata la vista è determinato dal parametro animato. Se il parametro animato è SÌ, la vista è animata in posizione; in caso contrario, la vista viene semplicemente visualizzata sul posto. La vista viene automaticamente ridimensionata per adattarsi tra la barra di navigazione e la barra degli strumenti (se presente) prima che venga visualizzata.

Se si desidera visualizzare una vista più piccola, è necessario creare un contenitore e renderlo figlio della vista del VC, impostando le dimensioni manualmente. La maschera di autoresize potrebbe dover essere impostata correttamente, a seconda di come si crea la vista.

+0

Grazie, questa deve essere la documentazione che ho letto una volta ma ho dimenticato esattamente cosa/dove l'ho letto. – Ryan

+2

Esiste un modo per forzare il controller di navigazione a riadattare le dimensioni del controller di visualizzazione figlio dopo l'operazione di spinta? Sto cambiando l'altezza del controller di navigazione, ma non lo aggiusta automaticamente per qualche motivo. – devios1

+0

È inoltre presente un problema in cui il controller di navigazione non sta ridimensionando le dimensioni del controller di visualizzazione figlio quando si ruota il dispositivo durante la transizione. – AdamPro13

Problemi correlati