2017-08-02 1 views
-1

J'utilise AutoLayout pour ma conception d'application. Pour l'un de mes HeaderView, j'avais défini sa hauteur en utilisant AspectRatio. Maintenant, lorsque la vue principale ne contient aucune donnée, la hauteur de HeaderView doit être de 0 et lorsque les données sont ajoutées, elles doivent être de nouveau réglées au format d'origine. Pouvons-nous changer le rapport d'aspect lorsque nous changeons la valeur constante de toute contrainte. J'ai essayé le code ci-dessous, mais cela ne fonctionne pas correctement.Modifier la valeur de la contrainte de format d'image par programme

@IBOutlet weak var constOptions_Height: NSLayoutConstraint! 
if arrData.count == 0 { 
    constOptions_Height.constant = 0.0 
} 
else{ 
    constOptions_Height.constant = 50.0 
} 
+0

Je pense que vous devez changer la valeur du multiplicateur et non la constante. constOptions_Height.multiplier = cgfloatValue – Rishabh

+0

@Rishabh Multiplier est une propriété get only. –

+0

alors vous pourriez essayer de recréer cette contrainte afin de modifier le multiplicateur, à peu près comme nous assignons le cadre pour modifier la position des vues. Ou créez simplement cette contrainte à partir du code au lieu du storyboard. https://stackoverflow.com/questions/31334017/how-to-set-aspect-ratio-constraint-programmatically-in-ios – Rishabh

Répondre

1

Vous pouvez utiliser l'approche suivante

Donnez deux contraintes. Un pour le rapport d'aspect et un autre pour la hauteur.

Faire les deux alternativement actifs comme

constOptions_Aspect.isActive = false 
constOptions_Height.isActive = true 

Vous pouvez donner de la hauteur zéro, une hauteur constante.

+0

En fait, vous n'avez pas besoin de changer 'constOptions_Aspect' s'il a une priorité inférieure à' constOptions_Height'. Par exemple, si 'constOptions_Aspect' a la priorité' 999' et 'constOptions_Height' a la priorité' 1001', la définition de 'constOptions_Height.isActive = true' suffira. – Sulthan

+0

Oui, c'est vrai. Avec différentes priorités, nous pouvons également atteindre la même chose. –

+0

Merci @MohammadSadiq. –