Utiliser la mise en page automatique pour définir dynamique UIView pour correspondre à conteneur de vue

J'ai une UIView de l'IB qui a un autre UIView l'intérieur d'elle, que je suis en utilisant un conteneur de vue. Dans le code, j'ai créer trois différents points de vue et puis d'animer le plus approprié dans le récipient de vue en fonction de l'état de l'application. Un seul des trois différents points de vue seront valables à un moment donné. Le problème c'est que quand je lance sur différentes iPhone dans le simulateur, mon nouveau sous-vues ne sont pas mis à l'échelle pour correspondre le conteneur de vue. Je suis en utilisant la mise en page automatique. Pour des fins de test, j'ai mis en place mon sous-vues à être juste un gros bouton qui a toutes ses bords contraint à l'superview. Et le conteneur de vue a aussi ses bords contraint à superview. Ce que je veux, c'est de la sous-vue de faire correspondre le conteneur de vue. j'.e le bouton s'étend sur la totalité de la taille du conteneur de vue. Lorsqu'il est exécuté sur différents iPhones de la taille du conteneur de vue et, par conséquent, la sous-vue doivent évoluer proportionnellement par rapport à l'autre iPhone de tailles d'écran.

Ci-dessous le code que j'utilise pour init mon sous-vue et de mettre en place de contraintes par rapport au conteneur vue.

UIView *containerView = self.subView;
UIView *newSubview = [[mySubview alloc] init];
[newSubview setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.containerView addSubview:newSubview];

[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]];

[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0]];

[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0]];

[self.containerView addConstraint:[NSLayoutConstraint constraintWithItem:newSubview attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.containerView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0]];  

J'ai juste ne peut pas sembler obtenir que cela fonctionne. Je suis assez nouveau à mise en page automatique et ne suis pas sûr de ce que je fais de mal et pour cesser de se taper la tête contre ce mur. Toute aide serait formidable. 🙂


************* PLUS D'INFOS **************


Désolé, je n'ai pas déclaré mon problème aussi clairement que je pouvais avoir. Voici donc quelques infos avec des captures d'écran. Tout d'abord, je vais vous décrire ce que j'ai fait au niveau du code.

Dans didFinishLaunchingWithOptions dans AppDelegate.m, j'ai créer MyViewController comme ça,

self.myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];

Dans le viewDidLoad dans MyViewController.m, j'ai créer mySubview et de l'ajouter à ma containerView et de créer des contraintes, comme cela,

UIView *containerView = self.containerView;
UIView *mySubview = [[MySubview alloc] init];
[mySubview setTranslatesAutoresizingMaskIntoConstraints:NO];
[containerView addSubview:mySubview];

NSDictionary *views = NSDictionaryOfVariableBindings(mySubview);
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[mySubview]|"
                                                                 options:0
                                                                 metrics:nil
                                                                   views:views]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[mySubview]|"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:views]];

Et enfin dans l'init dans MySubview.h-je ajouter de la plume comme une sous-vue comme ça,

- (id)init
{
    if(self = [super init])
    {
        NSArray *nibArray = [[NSBundle mainBundle]loadNibNamed:@"MySubview" owner:self options:nil];
        [self addSubview:[nibArray objectAtIndex:0]];
    }
    return self;
}

Un couple de choses à noter qu'il peut aider,

Dans MyViewController.xib, j'ai une UIView que je suis en utilisant le containerView. Il a un IBOutlet de UIView* containerView est celui qui est mentionné ci-dessus. Les seules contraintes que j'ai pour le containerView de l'IB sont, de leader, de fuite et en bas de l'espace de Superview et supérieur de l'espace de Superview = 44.

Pour MySubview.xib, la hauteur et la largeur de 300, (pas de contraintes sont utilisées pour la hauteur ou la largeur). J'ai l'impression que ces tailles ne devrait pas d'importance depuis mySubview est censé être contraint de containerView.

Dans MySubview.xib, j'ai 3 objets, topButton: hauteur = 29, middleView: hauteur = 242 et bottomButton: hauteur = 29. (voir image jointe) TopButton a conduit, de fuite et de haut en Superview contraintes et un bas middleView contrainte. MiddleView a attaque et de fuite de Superview contraintes et un haut de topButton contrainte et un bas bottomButton contraintes. Et enfin bottomButton a la principale, arrière et bas de Superview contraintes et un haut de middleView contrainte.

Ce que je veux est pour mySubview à l'échelle pour s'adapter à la containerView depuis des contraintes ont été créer et ajouter mais au lieu de cela, mySubview devient très grande et clips containerView.

Voici quelques captures d'écran:

MyViewController.xib, le rectangle bleu en dessous du titre de mon conteneur vue et a la IBOutlet containerView.

Utiliser la mise en page automatique pour définir dynamique UIView pour correspondre à conteneur de vue

MySubview.xib

Utiliser la mise en page automatique pour définir dynamique UIView pour correspondre à conteneur de vue

Et enfin, le résultat, qui sont incorrectes.

Utiliser la mise en page automatique pour définir dynamique UIView pour correspondre à conteneur de vue

Au lieu je voudrais que ce que j'ai faux juste pour obtenir la copie d'écran.

Sur l'iPhone 4,

Utiliser la mise en page automatique pour définir dynamique UIView pour correspondre à conteneur de vue

De l'iPhone 5,

Utiliser la mise en page automatique pour définir dynamique UIView pour correspondre à conteneur de vue

Comme vous pouvez le voir dans les fausses captures d'écran, mySubview échelle pour s'adapter à la containerView, de même que containerView échelles un peu pour s'ajuster à l'autre téléphone tailles d'écran.

Espère que je n'ai pas trop d'info. Toute aide serait formidable. Je sens que je suis proche, mais doit manquer une étape clé. Grrrrr.

InformationsquelleAutor Feta | 2013-04-22