Ich denke, es ist ein ziemlich verbreitetes Paradigma , das je nach Geschäftslogik UIViews
meistens ein- UILabels
und ausgeblendet wird. Meine Frage ist, wie AutoLayout am besten verwendet wird, um auf ausgeblendete Ansichten zu reagieren, als ob ihr Frame 0x0 wäre. Hier ist ein Beispiel für eine dynamische Liste von 1-3 Funktionen.
Im Moment habe ich einen oberen Bereich von 10 Pixel von der Schaltfläche bis zum letzten Etikett, der offensichtlich nicht nach oben rutscht, wenn das Etikett ausgeblendet ist. Ab sofort habe ich einen Ausgang für diese Einschränkung erstellt und die Konstante abhängig von der Anzahl der angezeigten Beschriftungen geändert. Dies ist offensichtlich etwas hackig, da ich negative konstante Werte verwende, um den Knopf über den versteckten Frames nach oben zu drücken. Es ist auch schlecht, weil es nicht auf tatsächliche Layoutelemente beschränkt ist, sondern nur hinterhältige statische Berechnungen, die auf bekannten Höhen / Auffüllungen anderer Elemente basieren und offensichtlich gegen das kämpfen, wofür AutoLayout entwickelt wurde.
Ich könnte natürlich nur neue Einschränkungen in Abhängigkeit von meinen dynamischen Beschriftungen erstellen, aber das ist viel Mikromanagement und viel Ausführlichkeit für den Versuch, nur ein Leerzeichen zu reduzieren. Gibt es bessere Ansätze? Ändern Sie die Frame-Größe 0,0 und lassen Sie AutoLayout ohne Manipulation von Einschränkungen arbeiten? Ansichten komplett entfernen?
Um ehrlich zu sein, erfordert das Ändern der Konstante aus dem Kontext der verborgenen Ansicht eine einzige Codezeile mit einfacher Berechnung. Das Wiederherstellen neuer Einschränkungen mit constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
scheint so schwer zu sein.
Edit Feb 2018 : Siehe Bens Antwort mit UIStackView
s