I nuovi metodi NSLayoutConstraint
activateConstraints:
e deactivateConstraints:
non sembrano funzionare correttamente con i vincoli IB-create (che funzionano correttamente per vincoli di codici creati). Ho creato una semplice app di test con un pulsante con due serie di vincoli. Un set, che è installato, ha vincoli centerX e centerY e l'altro set, che viene disinstallato, ha vincoli top e left (costante 10). Il metodo button cambia questi set di vincoli. Ecco il codice,activateConstraints: e deactivateConstraints: non persistono dopo la rotazione dei vincoli creati in IB
@interface ViewController()
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *uninstalledConstraints;
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *installedConstraints;
@end
@implementation ViewController
- (IBAction)switchconstraints:(UIButton *)sender {
[NSLayoutConstraint deactivateConstraints:self.installedConstraints];
[NSLayoutConstraint activateConstraints:self.uninstalledConstraints];
}
-(void)viewWillLayoutSubviews {
NSLog(@"installed: %@ uninstalled: %@", ((NSLayoutConstraint *)self.installedConstraints[0]).active ? @"Active" : @"Inactive", ((NSLayoutConstraint *)self.uninstalledConstraints[0]).active ? @"Active" : @"Inactive");
}
Quando i lanci app, il pulsante è nella posizione corretta, centrato definito dai suoi vincoli installati. Dopo aver eseguito l'attivazione/disattivazione nel metodo di azione del pulsante, il pulsante si sposta correttamente nella sua nuova posizione, ma quando ruoto la vista in orizzontale, torna alla posizione inizialmente definita (sebbene un registro mostri ancora il set appena attivato come essere attivo). Quando ruoto di nuovo in verticale, il pulsante rimane nella sua posizione iniziale (centrato sullo schermo), e ora il registro mostra che l'insieme iniziale di vincoli come attivi e quelli che ho attivato, come inattivi.
La domanda è, si tratta di un bug o questi metodi non dovrebbero funzionare in questo modo con i vincoli definiti da IB?
Oooooh, bene, ora stiamo scendendo a puntine di ottone. Puoi pubblicare il progetto su github? Non vedevo l'ora. – matt
@matt, ecco il link, http://jmp.sh/GWIN1Bg – rdelmar
Giusto, ma non è così perché quello che stai facendo con i vincoli di disinstallato nello storyboard con uno sbocco a loro è incoerente? – matt