Swift fügt programmgesteuert Constraint hinzu

9

Ich füge ein UILabel (MengeLabel) in UIViewController im Storyboard-Editor hinzu. Und dann, in der schnellen Datei viewDidLoad , erstelle ich programmatisch ein UITextField (paymentTextField) und versuche eine Einschränkung zwischen amountLabel und paymentTextField hinzuzufügen. Hier ist mein Code in viewDidload :

%Vor%

Aber ich bekomme einen Fehler:

  

"Beenden der App aufgrund der nicht abgefangenen Ausnahme" NSGenericException ",   Grund: 'Constraint kann mit Elementen & gt; nicht aktiviert werden. und & gt; weil sie keinen gemeinsamen Vorfahren haben.   Verweist die Einschränkung auf Elemente in verschiedenen Ansichtshierarchien?   Das ist illegal. "

Weiß jemand, was falsch ist? amountLabel wird direkt in die Ansicht im Storyboard gezogen und "paymentTextField" wird programmatisch zur selben Ansicht hinzugefügt. Warum haben sie keinen gemeinsamen Vorfahren?

    
jimshicard 17.02.2016, 09:40
quelle

3 Antworten

50

Ich stieß auf das gleiche Problem, das Sie zuvor beschrieben haben. Um die programmatische Unteransicht (in Ihrem Fall das paymentTextField) zu erstellen, müssen Sie diese zuerst zur Unteransicht hinzufügen und dann Ihre Einschränkungen anwenden.

Wenn Sie zuerst die Unteransicht zur Ansicht hinzufügen, stellen Sie sicher, dass beide Ansichten dasselbe übergeordnete Element haben.

Sehr spät, aber hoffe, das hilft anderen.

    
Jamil Nawaz 25.01.2017 12:55
quelle
9

Checkliste für dieses Problem:

  • Überprüfen Sie, ob Sie die programmatisch erstellte Ansicht vor dem Aktivieren von Integritätsbedingungen zu hinzugefügt haben
  • Überprüfen Sie, ob Sie Integritätsregeln für Integritätsbedingungen in viewDidLoad () / viewWillAppear () schreiben. Sie sollten den Aktivierungscode für Einschränkungen in updateViewConstraints oder viewWillLayoutSubviews schreiben. ( vorgeschlagen von vmeyer )
  • Überprüfen Sie, ob Sie transmittsAutoresizingMaskIntoConstraints deaktivieren.
Milan Kamilya 05.04.2017 07:25
quelle
4

Der Fehler besagt, dass "weil sie keinen gemeinsamen Vorfahren haben", was bedeutet, dass sie nicht denselben Elternteil teilen. Um Abhängigkeiten zwischen zwei Elementen in Beziehung zu setzen, müssen sie eine Kind-Eltern-Beziehung oder eine Geschwisterbeziehung haben.

Stellen Sie in Ihrem Fall sicher, dass sie die gleiche übergeordnete Ansicht haben, bevor Sie die Einschränkung programmgesteuert hinzufügen.

    
Pauls 17.02.2016 09:57
quelle

Tags und Links