126 votes

Comment mettre à jour la contrainte de hauteur constante d'un UIView par programme?

J'ai un UIView et je définit les contraintes à l'aide de Xcode Interface Builder.

Maintenant, je dois mettre à jour cette constante UIView's hauteur par programme.

Il y a une fonction qui va comme myUIView.updateConstraints() , mais je ne sais pas comment l'utiliser.

263voto

Parth Adroja Points 6726

Sélectionnez la hauteur de la contrainte à partir de l'Interface builder et prendre une prise de courant. Ainsi, lorsque vous voulez changer la hauteur de la vue, vous pouvez utiliser le code ci-dessous.

yourHeightConstraintOutlet.constant = someValue
yourView.layoutIfNeeded()

Méthode updateConstraints() est une méthode d'instance de UIView. Il est utile lorsque vous définissez les contraintes de la programmation. Il met à jour les contraintes pour la vue. Pour plus de détails, cliquez ici.

117voto

geo1701 Points 3269

Si vous avez un affichage avec de multiples contraintes, un moyen beaucoup plus facile sans avoir à créer plusieurs points de vente serait:

Dans interface builder, donner à chaque contrainte que vous souhaitez modifier un identifiant:

enter image description here

Ensuite, dans le code, vous pouvez modifier plusieurs contraintes comme suit:

for constraint in self.view.constraints {
    if constraint.identifier == "myConstraint" {
       constraint.constant = 50
    }
}
myView.layoutIfNeeded()

Vous pouvez donner plusieurs contraint le même identifiant vous permettant ainsi de regrouper des contraintes et modifier tous à la fois.

56voto

AshvinGudaliya Points 1375

Changer HeightConstraint et WidthConstraint Sans créer IBOutlet .

Remarque: affectez une contrainte de hauteur ou de largeur dans un fichier Storyboard ou XIB. après avoir récupéré cette contrainte en utilisant cette extension.

Vous pouvez utiliser cette extension pour extraire une contrainte de hauteur et de largeur

 extension UIView {

var heightConstaint: NSLayoutConstraint? {
    get {
        return constraints.first(where: {
            $0.firstAttribute == .height && $0.relation == .equal
        })
    }
    set { setNeedsLayout() }
}

var widthConstaint: NSLayoutConstraint? {
    get {
        return constraints.first(where: {
            $0.firstAttribute == .width && $0.relation == .equal
        })
    }
    set { setNeedsLayout() }
}

}
 

Vous pouvez utilise

 yourView.heightConstaint?.constant = newValue 
 

14voto

dylanthelion Points 1060

Faites glisser la contrainte dans votre VC en tant que IBOutlet. Ensuite, vous pouvez modifier la valeur associée (et d’autres propriétés; consultez la documentation):

 @IBOutlet myConstraint : NSLayoutConstraint!
@IBOutlet myView : UIView!

func updateConstraints() {
    // You should handle UI updates on the main queue, whenever possible
    DispatchQueue.main.async {
        myConstraint.constant = 10
        myView.layoutIfNeeded()
    }
}
 

4voto

Nimisha joshy Points 111

Commencez par connecter la contrainte de hauteur à notre contrôleur de vue pour créer IBOutlet comme ci-dessous.

 @IBOutlet weak var select_dateHeight: NSLayoutConstraint!
 

puis mettre le code ci-dessous en vue n'a charge ou à l'intérieur des actions

 self.select_dateHeight.constant = 0 // we can change the height value
 

si c'est à l'intérieur d'un clic de bouton

 @IBAction func Feedback_button(_ sender: Any) {
 self.select_dateHeight.constant = 0

}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X