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.
Sélectionnez la contrainte de hauteur dans le générateur Interface et prenez-la en sortie. Ainsi, lorsque vous souhaitez modifier la hauteur de la vue, vous pouvez utiliser le code ci-dessous.
yourHeightConstraintOutlet.constant = someValue
yourView.layoutIfNeeded()
La méthode updateConstraints()
est une méthode d'instance de UIView
. Cela est utile lorsque vous définissez les contraintes par programme. 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, indiquez à chaque contrainte que vous souhaitez modifier un identifiant:
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 le même identifiant à plusieurs contraintes, vous permettant ainsi de les regrouper et de les modifier en même temps.
Change HeightConstraint
et WidthConstraint
Sans créer IBOutlet
.
Remarque: Attribuez une contrainte de hauteur ou de largeur dans le 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
Faites glisser la contrainte dans votre VC en tant qu'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()
}
}
Vous pouvez mettre à jour votre contrainte avec une animation fluide si vous le souhaitez, voir le bloc de code ci-dessous:
heightOrWidthConstraint.constant = 100
UIView.animate(withDuration: animateTime, animations:{
self.view.layoutIfNeeded()
})
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 ne se 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
}
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 la méthode layoutIfNeeded () à ce moment-là.
Pour mettre à jour une contrainte de présentation, il vous suffit de mettre à jour la propriété constant et d'appeler layoutIfNeeded après.
myConstraint.constant = newValue
myView.layoutIfNeeded()
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()
}