2017-12-22 5 views
0

Ich habe viele Ansichten, die im Storyboard erstellt werden, aber ich möchte, dass sie ihre Abhängigkeiten dynamisch aktualisieren können, ohne jedes Mal ein IBOutlet verwenden zu müssen.Wie aktualisiere ich eine Abhängigkeit vom Storyboard ohne IBOutlet oder Identifier?

Ich begann eine benutzerdefinierte Klasse für die Super der Ansicht machen ich aktualisieren möchten, und seine subview der Boden wie diese Einschränkung ändern:

myView.constraints.filter{ $0.firstAnchor is NSLayoutAttribute.bottom }.constant -= 200 

‚NSLayoutAttribute.bottom‘ scheint nicht das zu sein korrekte Art, den Typ des Ankers zu überprüfen.

Wie überprüfe ich den Typ der Einschränkungen, die ich ändern möchte?

Korrigiere ich die Einschränkungen in der Superansicht der Ansicht, die ich ändern möchte, nicht die Ansicht selbst?

+0

Warum müssen Sie aktualisieren Ihre Einschränkungen? Gibt es spezielle Anforderungen? –

+0

Die aktualisierte Einschränkung würde die Ansicht dynamisch aus dem Weg der Tastatur verschieben; Ich wollte dies als eine benutzerdefinierte Klasse, so dass ich nicht die gleiche Funktionalität für jede Ansicht neu schreiben müsste, die sonst keine benutzerdefinierte Implementierung benötigen würde – caziz

+0

Anstatt die Beschränkung zu aktualisieren, setze den Ansichtsrahmen und benutze 'uiview.animation' für die Animation. [Siehe hier] (https://www.raywenderlich.com/173544/ios-animation-tutorial-getting-started-3) –

Antwort

0

NSLayoutConstraint von iOS7 haben eine Eigenschaft namens identifier, aus Code oder aus IB können Sie diese Eigenschaft festlegen.
Danach, um die Einschränkung zu erhalten, die Sie suchen, ist nur eine Frage der Suche in einer bestimmten Ansicht.
Betrachten Sie diese UIView Erweiterung:

func constraint(withIdentifier:String) -> NSLayoutConstraint? { 
     return constraints.filter{ $0.identifier == withIdentifier }.first 
    } 
+0

Richtig, aber ich möchte vermeiden, für alle meine Ansichten, die ich will, Kennungen zu erstellen diese Funktionalität. Gibt es eine Möglichkeit, nach Beschränkungstyp zu suchen? – caziz

+0

Ja, überprüfen Sie diese Antwort https://stackoverflow.com/questions/26833641/ios-find-top-constraint-for-a-view – Andrea

+0

Auch dieses Projekt von Erica Sadun auf GitHub https://github.com/erica/ Auto-Layout-Entmystifiziert/tree/master/2ndEdition/Constraints% 20Pack/Constraint% 20Matching – Andrea

0

Gemäß Vorschlag des dahlia_boy, benutzte ich UIView.animate diese Funktionalität zu erreichen, es gilt jedoch nicht dauerhaft zu sein scheinen:

translatesAutoresizingMaskIntoConstraints = true 
UIView.animate(withDuration: 1, animations: { 
    self.frame.size.height -= 200 
}) 
Verwandte Themen