2016-04-04 9 views
1

Ich weiß, wie Autoloay-Einschränkungen mit Größenklassen perfekt erstellen.Autolayout Constraints Update mit Größenklassen

Aber ich bekomme nicht wann zu rufen layOutIfNeeded(), setNeedsDisplay(), layOutSubViews(), setUpdateConstraints().

Kann jemand sagen, wie diese Funktion ordnungsgemäß aufgerufen wird, um die Benutzeroberfläche zu aktualisieren, nachdem sich die Einschränkungen geändert haben.

Eine andere meine Sorge ist, wenn nur einzelne Funktion von oben aufrufen und mit anderen Funktionen aufrufen.

+0

überprüfen Sie dies. http://stackoverflow.com/questions/20609206/setneedslayout-vs-setneedsupdateconstraints-and-layoutifneded-vs-updateconstra –

Antwort

0

Es muss wirklich klar sein, dass Ihr Layout von einer Routine berechnet wird, die zu bestimmten Zeiten zur Laufzeit aufgerufen wird.
Es kann vorkommen, dass Sie das aktuelle Layout ändern müssen, indem Sie beispielsweise die constant einer bestimmten Einschränkung ändern. Wenn Sie das tun, werden Sie keine Änderungen in der Benutzeroberfläche bemerken, weil die Routine noch nicht aufgerufen wird.
Was Sie tun können, ist das Layout Routine zu zwingen, genannt zu werden, und Sie tun, dass durch diese beiden Methoden:

  • setNeedsLayout: Sie sagen, dass die Ansicht, die ein Layout benötigt. Das nächste Mal, wenn die Routine aufgerufen wird, weiß, dass diese Ansicht ein Layout
  • layOutIfNeeded() aktualisieren haben müssen: Sie wollen nicht auf den nächsten Anruf warten, und Sie sagen, das System Layout Berechnung zu zwingen, so schnell wie möglich

Samt Sache passieren mit setNeedsDisplay() und displayIfNeeded(), mit dem ersten Sie sagen, dass eine Ansicht erneut gerendert werden muss, und mit dem zweiten sagen Sie so schnell wie möglich.
Wenn Sie sich fragen, warum, ist der Grund Leistung. Ist es nutzlos, alles jedes Mal neu zu rendern, spart dieser faule Ansatz Systemressourcen.
Die Methoden - setNeedsUpdateConstraints und -updateConstraintsIfNeeded sind im Prinzip das gleiche Konzept für Constraints, mit dem Unterschied, dass Sie keine Änderungen in der Benutzeroberfläche sehen, bis Sie ein Layout erzwingen, warum diese Methoden nützlich sind? Manchmal müssen Sie nach einer Änderung der Abhängigkeit prüfen, ob das Layout noch gültig ist, ohne den Aspekt Ihrer Benutzeroberfläche zu ändern.

+0

Also, was wäre richtig sequece diese Methoden aufrufen. Da ich Autolayout mit Größenklassen verwende und Constraints aktualisieren möchte und nur für diese bestimmte Größenklasse korrekt angezeigt werden soll. Welche Methoden sollte ich aufrufen, in welcher Reihenfolge, in Bezug auf adaptive Größenklassen. – Saggy

+0

Modify Einschränkungen-> setNeedsLayout-> layOutIfNeeded – Andrea

+0

Derzeit rufe ich nur layOutIfNeeded(); Es wird nicht korrekt aktualisiert. Also, muss ich sowohl setNeedsLayout() gefolgt von layOutIfNeeded() aufrufen? – Saggy

Verwandte Themen