2012-07-08 1 views
6

Sto implementando il contenimento di UIViewcontroller. Nell'esempio seguente ho impostato la dimensione del frame dei childcontroller nel controller root. La vista secondaria viene visualizzata come la dimensione che ho impostato, tuttavia quando controllo i suoi limiti all'interno del contenitore1 riporta una dimensione diversa alla dimensione impostata.visualizza la dimensione del frame del controller nel controller figlio

Rootcontroller (contenitore)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


self.containA = [[Container1 alloc]init]; 
self.containB = [[Container2 alloc]init]; 

self.containA.view.frame = CGRectMake(50, 50,50, 50); 
self.containB.view.frame = CGRectMake(50, 50, 300, 300); 

    [self addChildViewController:self.containA]; 
    [self addChildViewController:self.containB]; 

    [self.view addSubview:self.containA.view]; 

Container1

-(void)viewDidLoad { 
    [super viewDidLoad]; 




UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
//[self.view addSubview:view]; 
self.view = view; 
self.view.backgroundColor = [UIColor redColor]; 
[view release]; 
NSLog(@"view dims %f %f",self.view.bounds.size.width,self.view.bounds.size.height); 
} 

uscita Console dal contenitore 1 vista affievolisce 768,000000 1004,000000

ho pensato che il problema è stato correlato all'impostazione telaio vista UIScreen schermata principale] applicationFrame. Così ho rimosso tutto questo codice in modo tale che l'uiview sia stato creato automaticamente. Il problema rimane ancora ..

+0

Sono abbastanza fiducioso, btw, che l'impostazione di self.view all'interno di viewDidLoad è un errore. Forse stai pensando a loadView? http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW1 –

+0

@ctrahey ha ragione, tu sicuramente non deve impostare la vista all'interno di '-viewDidLoad'. Se si sta creando la vista a livello di codice anziché utilizzare uno storyboard o un pennino, è necessario crearlo e impostarlo '-loadView'. Inoltre, un controller di visualizzazione non dovrebbe mai cambiare la cornice della sua vista. Il controllore genitore o la finestra lo ottiene sempre. –

+0

grazie per la guida, quindi nel mio caso in cui ho due controller di vista annidati in un genitore, come potrei impostare la loro dimensione dal genitore? Potrei impostarlo all'interno di ogni controller stesso ma come hai suggerito e sarei d'accordo che questo non è è il modo più elegante di fare le cose Ci scusiamo per le 101 domande ma sono abituato al controller di una vista per schermo, questo flusso di lavoro di contenimento è tutto nuovo per me. – coasty

risposta

5

I frame vista non sono effettivamente utilizzabili in viewDidLoad; dovresti spostare tutto il codice che manipola la geometria in viewWillAppear. Il sistema bloccherà tutte le modifiche che hai impostato in viewDidLoad tra lì e quando si parla di Tom come sullo schermo.

+23

In realtà, dovresti spostare le modifiche della geometria in '-viewDidAppear' pre-iOS 5 e in' -viewWillLayoutSubviews' per iOS 5+. '-viewWillAppear:' potrebbe non avere i limiti/orientamenti corretti se la vista è animata. –

+0

Grazie, @JasonCoco; un buon consiglio :-) –

+0

Grazie @ctrahey Ho cercato di determinare proprio questo. –