Autolayout Probleme mit iOS8 mit Code, der auf iOS7 gut funktioniert

Ich bin gerade dabei, eine App für das iPhone und iPad zu entwickeln. Es unterstützt iOS6 und iOS7 und verwendet ausschließlich das automatische Layout.

In der vergangenen Woche, als Apple bekannt gab, dass iOS8 zur Hauptsendezeit bereit ist, habe ich eines meiner iPhones und ein iPad auf iOS8 aktualisiert. Ich habe auch meinen XCODE auf die Version 6 hochgefahren. Ich habe das 2. iPhone, das ich bei iOS7 gelassen habe.

Ich habe mit Xcode 6 neue ausführbare Dateien erstellt und war betrübt darüber, dass die Bildschirmlayouts bei der Ausführung auf meinen Geräten mit iOS8 fehlerhaft waren, auf iOS7 jedoch immer noch einwandfrei. Dies gilt sowohl für meine physischen Geräte als auch für die Xcode-Emulatoren.

Es hat viel Graben gekostet, aber ich bin mir ziemlich sicher, was passiert, obwohl ich nicht weiß warum.

Besonders unter iOS8 schlagen bestimmte automatische Layoutvorgänge für mich fehl, unter iOS7 sind sie jedoch in Ordnung.

Einige Beispiele für eine Schaltfläche, die ich auf einer zugrunde liegenden Ansicht platziere, deren Größe der Bildschirmgröße entspricht:

(1) Wenn ich das automatische Layout auffordere, die horizontale Mitte der Schaltfläche (CX) gleich der horizontalen Mitte der zugrunde liegenden Ansicht zu positionieren, wird die horizontale Mitte der Schaltfläche am linken Rand der zugrunde liegenden Ansicht platziert.

(2) Wenn ich das automatische Layout auffordere, die Breite der Schaltfläche auf 50% der Breite der zugrunde liegenden Ansicht einzustellen, wird überhaupt keine Breite angegeben.

Ich kann diese Probleme folgendermaßen umgehen:

(1) Ich fordere das automatische Layout auf, die Mitte der Schaltfläche gleich dem linken Rand der darunter liegenden Ansicht zuzüglich 50% der Bildschirmbreite zu positionieren.

(2) Ich fordere das automatische Layout auf, die Breite der Schaltfläche auf 50% der Bildschirmbreite einzustellen.

Ich kehre langsam mit solchen Behelfslösungen zu automatischem Layout-Code zurück, der auf iOS7 und iOS8 für mich funktioniert. Aber ich frage mich wirklich, was hier los ist.

Es sieht so aus, als ob das automatische Layout die Größe der zugrunde liegenden Ansicht nicht bestimmen kann. Daher schlagen Berechnungen des automatischen Layouts, die diese Informationen erfordern, fehl. Es weiß jedoch, wo sich der obere und der linke Rand der Ansicht befinden, sodass Berechnungen auf der Grundlage dieser Daten erfolgreich sind.

Dies ist eine große App, und ich habe viele hundert Zeilen Auto-Layout-Code für iOS6 und iOS7 geschrieben, der für mich perfekt funktioniert.

Ich habe drei Tage lang mit iOS8 gearbeitet und Dinge ausprobiert und bin nicht klüger als zu Beginn.

Hat jemand Vorschläge oder Gedanken dazu, worum es hier gehen könnte?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage