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.
überprüfen Sie dies. http://stackoverflow.com/questions/20609206/setneedslayout-vs-setneedsupdateconstraints-and-layoutifneded-vs-updateconstra –