2014-09-24 6 views
8

Ich benutze iOS 8. Meine Feder hat Auto-Layout und Größenklassen aktiviert. Ich habe zwei Layouts in IB gemacht, eins für jede Breite/beliebige Höhe und eins für jede Breite/kompakte Höhe. Ich habe verschiedene Orientierungen und Gerätegrößen in IB getestet und ich habe keine Einschränkungsprobleme in IB.Warum erhalte ich bei einer Einschränkung, die nicht für die Größenklasse installiert werden soll, einen Fehler bei der automatischen Anzeige?

Jetzt, wenn ich die App auf meinem Handy laufen lasse. Die Ansicht ist im Hochformat korrekt dargestellt. Dann drehe ich mein Handy in die Landschaft und bekomme eine "Unfähigkeit, gleichzeitig Einschränkungen zu erfüllen". Error. Wenn ich mir die Liste widersprüchlicher Einschränkungen anschaue, sehe ich eine Einschränkung, die für Landschaftslayouts hätte deinstalliert werden sollen. Wenn die Drehung abgeschlossen ist, wird das Landschaftslayout korrekt angezeigt.

Es ist, als ob iOS versucht, die Ansicht mit den neuen Grenzen auszulegen, bevor die alten Einschränkungen deinstalliert werden. Ist das ein bekanntes Problem mit iOS? Gibt es einen Schritt, den ich implementieren muss, um Größenklassen korrekt zu unterstützen?

+2

Ich habe genau das gleiche Problem! Wenn ich zum Hochformat rotiere (im Simulator), bekomme ich eine Constraint-Einschränkung für eine Constraint, die für diese Größenklasse * nicht * installiert ist! Wahnsinnig! Ich setze die Einschränkungen immer wieder zurück - der gleiche Fehler! – wcochran

Antwort

0

Ich denke immer noch, dass dies ein iOS-Fehler ist, aber ich habe keine Zeit, ein Beispielprojekt zu erstellen, um es zu reproduzieren. Ich denke, das Besondere an diesem Layout ist, dass ich eine Bildansicht habe, die sich an einen völlig anderen Ort bewegt, wenn das Telefon in die Landschaft gedreht wird.

Die Breiteneinschränkung für die Bildansicht hatte unterschiedliche Konstanten für jede Größenklasse, aber dies verursachte eine Ausnahme.

Das nächste, was versucht wurde, war die Verwendung unterschiedlicher Breitenbeschränkungen. Einer wurde für kompakte Höhe installiert, der andere wurde für alles andere installiert. Dies warf immer noch eine Ausnahme auf, obwohl die Abbruchbedingung nicht installiert sein sollte.

Schließlich war die Lösung, die ich arbeitete, zwei Bildansichten zu haben, eine für normale Layouts und eine für kompakte Höhe. Es wurde jeweils nur eine Bildansicht installiert. Dies funktioniert ohne Ausnahmen und sieht genau gleich aus.

5

Ich stieß auf das gleiche Problem. Sehr frustrierend! Zuerst habe ich Code zu willTransitionToTraitCollection hinzugefügt: withTransitionCoordinator: um zu erkennen, ob die newCollection eine Größenklasse war, die die Einschränkung nicht benötigte. Wenn ja, dann setze ich constraint.active = NO.

Es hat den Trick, aber ich hasste den Code. Ich war einfach wie: "Warum sollte ich das tun müssen? Die Einschränkung ist nicht für die neue Größenklasse installiert!"

Dann habe ich herausgefunden, dass, wenn ich die Priorität der beanstandeten Einschränkung auf 999 in Interface Builder gesenkt habe ich nicht mehr den Constraint-Fehler in der Konsole, wenn ich gedreht habe. :-) Und alles stimmt wieder mit der Welt.

+0

Ich "genieße" gerade dieses Problem auch - und ich denke, dass ich deinen Prioritätstrick geben werde. Aber wissen Sie, ob Constraint-Konflikte dieser Art jemals zu einem Crash/ähnlichen Problem führen könnten und ob Apple eine App nur auf dieser Grundlage ablehnen würde? – headbanger

+1

Versuchte es - es hat funktioniert. Du bist eine Herzogin. Stimmen Sie ab. – headbanger

Verwandte Themen