2016-05-18 7 views
8

Come modificare il moltiplicatore di un vincolo utilizzando Swift.iOS - Modificare il moltiplicatore del vincolo di Swift

someConstraint.multiplier = 0.6 // error: 'multiplier' is get-only property 

Mi piacerebbe sapere come modificare il moltiplicatore nel codice (Swift).

+2

creare più vincoli con i diversi moltiplicatori e attivare/disattivare quelli giusti al momento giusto. – luk2302

+8

http://stackoverflow.com/questions/19593641/can-i-change-multiplier-property-for-nslayoutconstraint –

risposta

30

Poiché multiplier è una proprietà di sola lettura e non è possibile modificarlo, è necessario sostituire il vincolo con il clone modificato.

È possibile scrivere un'estensione per farlo, come:

extension NSLayoutConstraint { 
    func constraintWithMultiplier(_ multiplier: CGFloat) -> NSLayoutConstraint { 
     return NSLayoutConstraint.constraintWithItem(self.firstItem, attribute: self.firstAttribute, relatedBy: self.relation, toItem: self.secondItem, attribute: self.secondAttribute, multiplier: multiplier, constant: self.constant) 
    } 
} 

Swift 3.0+ Versione:

Usage:

var newConstraint = self.constraintToChange.constraintWithMultiplier(0.75) 
self.view!.removeConstraint(self.constraintToChange) 
self.view!.addConstraint(self.constraintToChange = newConstraint) 
self.view!.layoutIfNeeded() 
+1

Grazie mille per la risposta! Provo a fare il tuo codice. Ma non riesco a ottenere ciò che voglio, a causa di 'self.view!'. Ho risolto 'self.view!' Nel mio caso. Ma io uso il modo di Mr. Andrew Schreiber in "Posso modificare la proprietà moltiplicatore per NSLayoutConstraint?" Ha funzionato bene. Avevo bisogno di cercarlo di più. – redstone

Problemi correlati