Tutti sanno che non ci si può fidare della dimensione del frame su un metodo init/viewDidLoad di UIViewController; questo:UIViewController viewDidLoad errato larghezza/altezza
- (void)viewDidLoad: {
NSLog(@"%d", self.view.frame.size.width);
}
stamperà taglie sbagliate in molte occasioni (in particolare è praticamente rotto in modalità orizzontale)
Questo effettivamente restituire risultati sempre corretti quindi è bene per il layout dei subviews:
- (void)viewWillAppear: {
NSLog(@"%d", self.view.frame.size.width);
}
Il problema è che viewWillAppears viene chiamato ogni volta che viene visualizzata la vista, quindi non è adatto per allocare o aggiungere sottoview. Quindi finisci per dichiarare ogni singola vista nell'interfaccia e ti ritroverai con enormi file di intestazione che non mi piacciono affatto poiché la maggior parte degli elementi non richiede ulteriori manipolazioni dopo l'installazione iniziale.
Quindi, la prima domanda è: C'è un modo migliore per gestire il posizionamento delle sottoview?
La seconda domanda è molto correlata, diciamo che ho una sottoclasse di UIView che include vari altri sottoview. Lo dichiaro all'interno della mia interfaccia e lo alloco/inizialo nel mio metodo init/viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
...
menu = [[SNKSlidingMenu alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
...
}
Come già sappiamo ora abbiamo bisogno di riposizionarla in viewWillAppear per ottenere una lettura più accurata
- (void)viewWillAppear:(BOOL)animated{
....
menu.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
....
}
Il problema è che, naturalmente, ha bisogno di essere riposizionato come bene tutto il subviews. Questo viene fatto dalla funzione layoutSubviews che viene chiamata automaticamente, ma abbiamo lo stesso problema: Tutte le sottoview devono essere dichiarate all'interno dell'interfaccia della classe SNKSlidingMenu. C'è un modo per aggirare questo?
Grazie.
utilizzare l'autolayout o impostare le maschere di autoresizing? – jrturton