UIStackView
erstellt Constraints mit einer Priorität von 1000 (die maximal zulässige Priorität), die UILayoutPriorityRequired
ist. Auto-Layout ist erforderlich, um diese Einschränkungen wenn möglich zu erfüllen.
Ihre Einschränkung bei "hoher" Priorität (UILayoutPriorityDefaultHigh == 750
, vermute ich) konfligiert mit den erforderlichen Einschränkungen der Stapelansicht, so dass automatisches Layout Ihre Einschränkung ignorieren wird.
Wenn Sie die Beschränkungspriorität auf 1000 festlegen, kann das automatische Layout nicht alle erforderlichen Einschränkungen erfüllen. Es wird einen Fehler protokollieren, und es wird eine der Einschränkungen brechen. Sie können nicht auswählen, welche Einschränkung es bricht.
Beachten Sie, dass es nur eine der drei Einschränkungen zu lösen, um das System zu lösen, und es kann jede der drei widersprüchlichen Einschränkungen brechen. Wenn Sie jedoch eine einzelne der drei widersprüchlichen Einschränkungen durchbrechen, bleibt kein System übrig, das Ihre Sicht zentriert. Ihre Ansicht sollte entweder gestreckt oder an einem Ende der Stapelansicht angezeigt werden, je nachdem, welches automatische Layout unterbrochen wird. Und eine zukünftige Version von iOS könnte das automatische Layout ändern, so dass eine andere Einschränkung aufgehoben wird und sich das Layout ändert.
Es ist nicht klar, warum Sie versuchen, eine Stapelansicht zum Zentrieren Ihrer Ansicht zu verwenden. Wenn Sie nur eine Ansicht haben und zentriert werden möchten, erstellen Sie für das übergeordnete Element UIView
statt UIStackView
und richten Sie die Einschränkungen so ein, dass die Ansicht in der übergeordneten Ansicht zentriert wird.
Wenn Sie eine Stapelansicht verwenden, weil Sie manchmal mehr als eine angeordnete Teilansicht im Stapel haben möchten, sollten Sie zusätzlich zu Ihrer Inhaltsansicht zwei weitere Teilansichten hinzufügen (eine an jedem Ende der Achse)). Erstellen Sie eine Beschränkung gleicher oder gleicher Höhe zwischen den Abstandshaltern.
"[Die Stapelansicht pinnt die erste und letzte angeordnete Ansicht bündig mit ihrer Kante entlang der Stapelachse. Für einen horizontalen Stapel bedeutet dies, dass die Vorderkante der ersten angeordneten Ansicht an die Vorderkante des Stapels angeheftet ist und die Hinterkante der letzten angeordneten Ansicht an die Hinterkante des Stapels angeheftet ist. Bei vertikalen Stapeln sind die oberen und unteren Kanten entsprechend angeheftet.] (Https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIStackView_Class_Reference/) "Wenn Sie also nur eine Unteransicht einfügen Es wird gestreckt, um die Achse des Stapels zu füllen. Siehst du das? –
Ja. Was ich nicht verstehe, ist, warum dies die intrinsische Inhaltsgröße außer Kraft setzt, selbst wenn ich die Inhaltsumgehungspriorität auf hoch setze. –