visual - ios swift add constraint



Façon correcte d'implémenter updateConstraints (1)

En fin de compte, cela dépendra de la position de vos vues à l'aide de la mise en forme automatique et des contraintes qui provoqueront des conflits lors de la modification de votre sous-vue. Cela va varier au cas par cas.

Prenez toujours note de la façon dont votre mise en page est affectée dans son ensemble pour chaque cas de bordure et pas seulement pour la seule vue qui a changé. Parfois, seules les contraintes de la sous-vue doivent changer comme dans votre exemple. Cependant, il existe également des moments où les contraintes pour l'ensemble de la mise en page doivent également être mises à jour.

Si vous le pouvez, il est toujours plus efficace de modifier uniquement les contraintes dont vous avez besoin pour que votre mise en page soit valide car vous réutilisez des contraintes existantes au lieu d'en créer de nouvelles. Et par changement, je ne veux pas nécessairement dire détruire et recréer des contraintes. Si vous le pouvez, modifiez simplement la valeur constante des contraintes dont vous avez besoin pour rendre votre mise en page valide.

Quelle partie de mes contraintes je devrais mettre à jour dans la méthode updateConstraints? Dois-je mettre à jour toutes les contraintes liées à ma sous-classe? Dans ma sous-classe UIView, j'ajoute habituellement un tableau de contraintes liées uniquement aux sous-vues définies dans cette sous-classe.

@property(nonatomic, strong) NSArray *subclassConstraints;

- (void)updateConstraints {
 [self removeConstraints:self.subclassConstraints];
 self.subclassConstraints = [self createConstraints];
 [self addConstraints:self.subclassConstraints];
 [super updateConstraints];
}

Donc, il n'y aura pas de collisions entre mes contraintes, les contraintes de super classe ou les contraintes de sous-classes.

La question est: Devrais-je mettre à jour toutes self.subclassConstraints? Ou je devrais mettre à jour seulement les contraintes qui pourraient être incorrectes après certaines actions?

S'il y a une propriété view, et que quelqu'un peut les réinitialiser ou affecter nil, je pense que toutes les contraintes liées seront incorrectes, donc je devrais mettre à jour les contraintes de cette vue dans chaque appel ( - (void)updateConstraints .

fe

@property (nonatomic, strong) UIImageView *imageSubview;


- (void)setImageSubview:(UIImageView *)imageView {
    if (![_imageView isEqual:imageView]) {
        _imageView = imageView;
        [self setNeedUpdateConstraints];
    }
}

- (void)updateConstraints {
    [self removeConstraints:self.imageViewConstraints];
    self.imageViewConstraints = [self createImageViewConstraints];
    [self addConstraints:self.imageViewConstraints];
    [super updateConstraints];
}

Alors devrais-je mettre à jour toutes mes contraintes dans la méthode updateConstraints? Ou devrais-je mettre à jour seulement certains d'entre eux (par exemple comme imageViewConstraints)





nslayoutconstraint