iOS8 mise en page Automatique par programmation pin relative à la mise en page de la marge
J'ai un élément de l'INTERFACE utilisateur (UISwitch
effectivement, mais il n'importe pas vraiment) est à la fois en attaque et de fuite de l'espace épinglé à superview dans Interface Builder. La contrainte ressemble à ceci dans Xcode 6:
La contrainte d'espace est la même efficacement. La valeur de la contrainte est 42.0 points.
C'est exactement ce que je veux, parce que pour les différents appareils, je peux changer layoutMargins
bien sur UIView
et les contraintes de fonctionner correctement, d'augmentation de la marge entre les vues.
Maintenant, je veux ajouter un autre point de vue dans le code qui serait à la fois avant et arrière de l'espace épinglé à son superview marge, de sorte que le même layoutMargins
ensemble de superview fonctionne.
J'ai épinglé la vue à l'aide de format visuel de la langue avec la syntaxe suivante:
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-42.0-[separatorView]-42.0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(self.contentView, separatorView)];
[self.contentView addConstraints:constraints];
[self.contentView setNeedsUpdateConstraints];
Cela fonctionne, mais layoutMargins
propriété n'a aucun effet à l'aide de cette contrainte, c'est de toute évidence n'est pas épinglé à la marge, mais directement à superview.
Donc ma question est:
Comment épingler élément de l'INTERFACE utilisateur des espaces à la marge dans le code à l'aide de visual format langue? Ou si pas possible, comment épingler avec constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
API?
Merci!
OriginalL'auteur Legoless | 2014-10-02
Vous devez vous connecter pour publier un commentaire.
Dans iOS8, le format visuel de la langue a été mis à jour "|-" ou "-|" par défaut à l'aide d'un espacement défini par le superview de layoutMargins propriété.
Donc la réponse à l'aide de visual langue de format est comme suit:
Si vous souhaitez consulter les marges de mise en page lors de la création de contraintes via directement de l'API, vous pouvez utiliser le nouvel iOS8 seuls les attributs de mise en page:
OriginalL'auteur algal
Je suis d'accord, "Dans iOS8, le format visuel de la langue a été mis à jour "|-" ou "-|" par défaut à l'aide d'un espacement défini par le superview de layoutMargins de la propriété."
Donc, Vous devez cocher l'option “Limite à la marge” lorsque vous utilisez une Interface builder pour vous aider dans votre mise en page. Si oui, alors il fonctionne.
Si le problème n'était toujours pas résolu, pourriez-vous me donner un projet de démonstration?
Ajouté:
Tson article qui nous montrent la fonction du nouvel ios8 API preservesSuperviewLayoutMargins, souhaitent être plus utile.
OriginalL'auteur Jenus Dong