Ho definito una vista personalizzata in un file NIB e vorrei creare un'istanza di una copia in uno StoryBoard ma ho problemi con l'autolayout.Problemi con AutoLayout con viste personalizzate definite nel file NIB e utilizzate in StoryBoard
In un semplice esempio, la vista personalizzata ha un'etichetta singola con una dimensione fissa e centrata sia verticalmente che orizzontalmente, il tutto utilizzando l'autolayout.
Il proprietario del file è impostato per la mia classe, ha una presa di corrente per la vista dall'alto. Nell'implementazione visualizzazione personalizzata che faccio:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if(self)
{
[[NSBundle mainBundle] loadNibNamed:@"FMCompassView" owner:self options:nil];
[self addSubview:self.topView];
}
return self;
}
Ora, nel mio storyboard, aggiungo un UIView, impostato è di classe alla mia classe personalizzata e layout fuori dimensioni e centrato sulla mia pagina, sempre utilizzando autolayout.
E il mio widget viene posizionato e il formato, ma il suo contenuto non viene ridimensionato come illustrato di seguito:
Ho provato ad aggiungere più vincoli dopo aver caricato dalla NIB, qualcosa sulla falsariga di:
UIView* subV = self.topView;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(subV);
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[subV]|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:viewsDictionary]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[subV]|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:viewsDictionary]];
Ma questo causa vincoli di layout non validi.
Qualche idea su come farlo funzionare?
Cheers!
penso di aver trovato il motivo: la vista creata dal caricamento del NIB deve essere detta di non convertire la maschera di ridimensionamento automatico in vincoli, * EVEN * se il contenuto del NIB viene effettivamente creato con l'autolayout abilitato. Quindi dopo aver caricato il NIB e prima di aggiungere la vista superiore alla vista personalizzata, devo chiamare: '[self.topView setTranslatesAutoresizingMaskIntoConstraints: NO];' – mkrus
Puoi trovare la risposta corretta qui: http://stackoverflow.com/a/34524346/971329. Vedi il mio commento qui sotto per l'implementazione rapida di una superview riutilizzabile che si prende cura di tutte le cose. – blackjacx