Ho una sottoclasse UIView personalizzata che aggiunge una sottoview in modo programmatico durante l'inizializzazione. Sto volendo che questa sottoview abbia la stessa larghezza della visualizzazione UIV personalizzata.Come ottenere dimensioni di un UIView personalizzato aggiunto tramite storyboard in initWithCoder :?
mio codice funziona bene se programatically aggiungo l'UIView personalizzato. Tuttavia, quando l'UIView viene inizializzato tramite lo Storyboard , non riesco a ottenere la larghezza di UIView personalizzata.
// Init programatically
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSLog (@"view: %f", self.frame.size.width); //WILL return width
NSLog (@"view: %f", self.bounds.size.width); //WILL return width
}
return self;
}
// Init from storyboard
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
NSLog (@"view: %f", self.frame.size.width); //Returns 0
NSLog (@"view: %f", self.bounds.size.width); //Returns 0
}
return self;
}
Quando initWithCoder: è gestito da StoryBoard, struttura e limiti della UIView sono tutti restituiti come 0. esiste un modo di accedere dimensioni della UIView all'interno initWithCoder ?? Oppure, almeno accedere alle dimensioni prima di drawRect: viene chiamato?
Grazie.
Aaaah. Grazie! Alla prova hai davvero ragione. layoutSubviews: ha avuto le dimensioni disponibili e viene chiamato prima di drawRect :! Proprio quello che stavo cercando. –
Per aggiungere qualche spiegazione in più, se stai utilizzando l'Autolayout (che penso che tu sia), i limiti della vista del controller della vista e delle sue sottoview non sono disponibili fino a quando non è avvenuto il layout - 'viewDidLayoutSubviews' viene chiamato sulla tua vista controller dopo questo è successo. – jrturton
Grazie per l'aiuto :) –