iOS: programmation, en modifiant des contraintes d'Interface Builder

Bonne journée les amis!

Je n'ai pas réussi à essayer d'animer les vues qui ont été mis de l'IB à partir du code. Application se bloque avec raison suivante:

Le point de vue de la hiérarchie n'est pas préparé pour la contrainte...

J'ai vu des questions similaires ici et la raison a toujours été que le point de vue qui a été créé par programmation, n'est pas encore ajouté superview. Mais j'ai créé tous les points de vue de l'IB!

La console a également dit:

Vue pas trouvé dans un conteneur de la hiérarchie: (ici c'est superview)

Il ne fait aucun sens pour moi, car en fait, c'est une sous-vue de appropriée superview, et xcode sait - elle imprime afficher la hiérarchie tout de suite et il s'adapte.

Quelle pourrait-être la raison?
Merci!!!!

Edit: le code que j'utilise:

    - (void)setEditingConstraintsForView:(UIView *)view
{
    //Pin given view to top, fix it height
    NSDictionary *givenView = @{@"view":view};
    view.translatesAutoresizingMaskIntoConstraints = NO;

    NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:givenView];
    NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view(height)]" options:0 metrics:@{@"height":@(viewHeight)} views:givenView];

    [self.animatedVIew addSubview:view];

    for (NSArray *constraints in @[horizontalConstraints, verticalConstraints]) {
        [view addConstraints:constraints];
    }
}

Aussi j'ai supprimer toutes les contraintes que j'ai mis dans de l'IB avant d'installer les nouveaux:

    - (NSDictionary *)constraintsFromIB
{
    if (!_constraintsFromIB) {
        _constraintsFromIB = @{@"view1":self.view1.referencingConstraintsInSuperviews,
                               @"view2":self.view2.referencingConstraintsInSuperviews,
                               @"view3":self.view3.referencingConstraintsInSuperviews };
    }

    return _constraintsFromIB;
}

Et puis:

- (void)updateViewConstraints
{
    [super updateViewConstraints];

    //clear all constraints
    for (NSString *viewName in self.constraintsFromIB.allKeys) {
        for (NSLayoutConstraint *constraint in self.constraintsFromIB[viewName]) {
            [constraint remove];
           }

}
}

Mise à JOUR 2: Méthode que j'utilise invoquer le changement: lorsque l'utilisateur touche l'affichage, celui-ci est appelé:

- (void)animateConstraintsForState:(LDYEditingLabel)state
{
    self.editingLabel = state;        
    [UIView animateWithDuration:0.3 animations:^{
        [self updateViewConstraints];
        [self.view layoutIfNeeded];
    }];
}

Plus tard dans updateViewConstraints: il y a un code qui déclenche ma méthode setEditingConstraintsForView:(UIView *)view

Pouvez-vous montrer un peu de code?
Quelle méthode avez-vous appeler ce code? viewDidAppear? viewDidAppear? ou une autre méthode?
Vient d'ajouter un autre modifier. Il déclenche à partir de la appuyez sur l'écran à l'aide de bloc d'animation.
Je ne vois pas le problème de ce que vous avez montré ici. Vous devrez peut-être définir un point d'arrêt, mais j'allais suggérer ce que Charlie Wu viens de mettre dans sa réponse - modifier les contraintes existantes si vous pouvez beaucoup plus facile
Merci en tout cas pour les conseils. On dirait qu'il n'est pas bon de mélanger de l'IB et de coder en dur l'approche.

OriginalL'auteur Aleksandr Shcherbakov | 2015-01-16