ajouter des contraintes par programme rapidement
Je suis en train d'ajouter des contraintes à un facebook sdk bouton de connexion.
J'ai le bouton à l'intérieur d'un défilement de vue et je suis d'essayer d'ajouter un haut contrainte à un label qui est aussi dans le défilement de la vue. Je suis en mesure d'ajouter avec succès à la hauteur de la contrainte sans les erreurs d'exécution réels, mais la contrainte ne semble pas être appliquée au bouton.
@IBOutlet weak var orLbl: UILabel!
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
var loginFBButton = FBSDKLoginButton()
loginFBButton.readPermissions = ["public_profile", "email"]
let heightConstraint = NSLayoutConstraint(
item: loginFBButton,
attribute: NSLayoutAttribute.Height,
relatedBy: NSLayoutRelation.Equal,
toItem: nil,
attribute: NSLayoutAttribute.NotAnAttribute,
multiplier: 1,
constant: 41)
let topConstraint = NSLayoutConstraint(
item: loginFBButton,
attribute: NSLayoutAttribute.TopMargin,
relatedBy: NSLayoutRelation.Equal,
toItem: self.orLbl,
attribute: NSLayoutAttribute.BottomMargin,
multiplier: 1,
constant: 31)
let leadingConstraint = NSLayoutConstraint(
item: loginFBButton,
attribute: NSLayoutAttribute.Leading,
relatedBy: NSLayoutRelation.Equal,
toItem: self.registerButton,
attribute: NSLayoutAttribute.Left,
multiplier: 1,
constant: 0)
let trailingConstraint = NSLayoutConstraint(
item: loginFBButton,
attribute: NSLayoutAttribute.Leading,
relatedBy: NSLayoutRelation.Equal,
toItem: self.registerButton,
attribute: NSLayoutAttribute.Right,
multiplier: 1,
constant: 0)
self.scrollView.addSubview(loginFBButton)
//loginFBButton.center = self.scrollView.center
loginFBButton.addConstraints([heightConstraint, topConstraint])
}
Puis, quand je comprennent l'ajout de la partie supérieure de la contrainte, j'obtiens une erreur à l'exécution:
Lorsqu'il est ajouté à un point de vue, la contrainte éléments doivent être des descendants de ce point de vue (ou de la vue elle-même). Cette plante si la contrainte doit être résolu avant le point de vue de la hiérarchie est assemblé.
Résiliation d'application en raison de uncaught exception 'NSGenericException', la raison: "Impossible d'installer contrainte sur la vue. La contrainte de référence de quelque chose de l'extérieur de la sous-arborescence de la vue? C'est illégal.
L'étiquette et le facebook bouton sont dans ma défilement de la vue? J'ai même imprimé orLbl.superview et loginFBButton.superview et je suis en option uiscrollview pour les deux
source d'informationauteur user2363025
Vous devez vous connecter pour publier un commentaire.
Il y a un nouveau (iOS8, OS 10.10), la plus facile à activer des contraintes qui n'implique pas de décider de la vue pour les ajouter. Les contraintes connaissez déjà les points de vue qu'ils appartiennent, alors d'abord, assurez-vous que vos points de vue ont été ajoutés à titre de sous-vues, puis d'appeler la méthode de la classe
activateConstraints
surNSLayoutConstraint
pour les activer:Lorsque vous créez des éléments de l'INTERFACE utilisateur de la programmation, vous devez dire à iOS de ne pas tourner son cadre dans de contraintes. Pour ce faire, juste après la création de
loginFBButton
faire:Pour Swift 1.2:
Pour Swift 2.0 & 3.0:
Enfin, vous allez avoir besoin de plus de contraintes. Je suggère de fixer une largeur de contrainte pour votre
loginFBButton
et l'ajout d'une contrainte de position le bouton horizontalement.