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

J’ai un UIView et je règle les contraintes en utilisant Xcode Interface Builder.

Maintenant, je dois mettre à jour UIView's constante de cette hauteur UIView's programmation.

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

Sélectionnez la contrainte de hauteur dans le générateur d’interface et prenez-en une sortie. Ainsi, lorsque vous souhaitez modifier 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 . Cela est utile lorsque vous définissez les contraintes par programmation. Il met à jour les contraintes pour la vue. Pour plus de détails, cliquez ici .

Si vous avez une vue avec plusieurs contraintes, un moyen beaucoup plus simple sans avoir à créer plusieurs points de vente serait:

Dans le générateur d’interface, donnez à chaque contrainte que vous souhaitez modifier un identifiant:

entrer la description de l'image ici

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

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

Vous pouvez donner plusieurs contraintes au même identifiant, vous permettant ainsi de regrouper des contraintes et de les modifier toutes en même temps.

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() } } 

Si la méthode ci-dessus ne fonctionne pas, assurez-vous de la mettre à jour dans le bloc Dispatch.main.async {}. Vous n’avez pas besoin d’appeler ensuite la méthode layoutIfNeeded ().

Commencez par connecter la contrainte Height dans notre viewcontroller pour créer IBOutlet comme le code ci-dessous montré

 @IBOutlet weak var select_dateHeight: NSLayoutConstraint! 

puis mettre le code ci-dessous en vue a chargé 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 } 

Change HeightConstraint et WidthConstraint Sans créer IBOutlet pour cela.

Remarque: Atsortingbuez une contrainte de hauteur ou de largeur au storyboard ou à la vue après avoir récupéré cette contrainte à l’aide de cette extension.

Vous pouvez utiliser cette extension pour récupérer une contrainte de hauteur et de largeur

 var heightConstaint: NSLayoutConstraint? { get { return constraints.filter { if $0.firstAtsortingbute == .height, $0.relation == .equal { return true } return false }.first } set{ setNeedsLayout() } } var widthConstaint: NSLayoutConstraint? { get { return constraints.filter { if $0.firstAtsortingbute == .width, $0.relation == .equal { return true } return false }.first } set{ setNeedsLayout() } } 

Vous pouvez utiliser

 yourView.heightConstaint = newValue 
 Create an IBOutlet of NSLayoutConstraint of yourView and update the constant value accordingly the condition specifies. //Connect them from Interface @IBOutlet viewHeight: NSLayoutConstraint! @IBOutlet view: UIView! private func updateViewHeight(height:Int){ guard let aView = view, aViewHeight = viewHeight else{ return } aViewHeight.constant = height aView.layoutIfNeeded() } 

Pour mettre à jour une contrainte de mise en page, il vous suffit de mettre à jour la propriété constante et d’appeler layoutIfNeeded after.

 myConstraint.constant = newValue myView.layoutIfNeeded()