Die Antwort lautet [view layoutIfNeeded].
Hier ist der Grund:
Sie erhalten weiterhin die aktuelle Breite und Höhe der Ansicht, indem Sie view.bounds.size.widthund view.bounds.size.height(oder den Rahmen, der gleichwertig ist, sofern Sie nicht mit dem spielen view.transform) überprüfen .
Wenn Sie die Breite und Höhe wünschen, die durch Ihre vorhandenen Einschränkungen impliziert werden, besteht die Antwort nicht darin, die Einschränkungen manuell zu überprüfen, da Sie dazu die gesamte Logik zur Lösung von Einschränkungen des automatischen Layoutsystems erneut implementieren müssten, um diese zu interpretieren Einschränkungen. Stattdessen sollten Sie nur das automatische Layout bitten, dieses Layout zu aktualisieren , damit es die Einschränkungen löst und den Wert von view.bounds mit der richtigen Lösung aktualisiert. Anschließend überprüfen Sie die view.bounds.
Wie können Sie das automatische Layout bitten, das Layout zu aktualisieren? Rufen [view setNeedsLayout]Sie an, wenn das automatische Layout das Layout in der nächsten Runde der Run-Schleife aktualisieren soll.
Allerdings , wenn Sie wollen , dass es das Layout sofort aktualisieren, so können Sie sofort die neuen Grenzen Zugriff Wert später im aktuellen Funktion oder an einem anderen Punkt vor der Wende der Laufschleife, dann müssen Sie anrufen [view setNeedsLayout]und [view layoutIfNeeded].
Sie haben eine zweite Frage gestellt: "Wie kann ich eine Höhen- / Breitenbeschränkung ändern, wenn ich keinen direkten Verweis darauf habe?".
Wenn Sie die Einschränkung in IB erstellen, besteht die beste Lösung darin, ein IBOutlet in Ihrem Ansichtscontroller oder Ihrer Ansicht zu erstellen, damit Sie einen direkten Verweis darauf haben. Wenn Sie die Einschränkung im Code erstellt haben, sollten Sie zum Zeitpunkt der Erstellung eine Referenz in einer internen schwachen Eigenschaft beibehalten. Wenn jemand anderes die Einschränkung erstellt hat, müssen Sie sie finden, indem Sie die Eigenschaft view.constraints in der Ansicht und möglicherweise die gesamte Ansichtshierarchie untersuchen und eine Logik implementieren, die die entscheidende NSLayoutConstraint findet. Dies ist wahrscheinlich der falsche Weg, da Sie auch effektiv bestimmen müssen, welche bestimmte Einschränkung die Grenzgröße bestimmt, wenn nicht garantiert wird, dass eine einfache Antwort auf diese Frage vorliegt. Der endgültige Grenzwert könnte die Lösung für ein sehr kompliziertes System mit mehreren Einschränkungen sein.