Warum erhalte ich bei einer Einschränkung, die nicht für die Größenklasse installiert werden soll, einen automatischen Layoutfehler?

8

Ich verwende iOS 8. Meine Feder hat automatische 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.

Jetzt, wenn ich die App auf meinem Handy starte. Die Ansicht ist im Hochformat korrekt dargestellt. Dann drehe ich mein Handy in die Landschaft und bekomme ein "Constraint nicht gleichzeitig 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 sieht so aus, 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?

    
bugloaf 24.09.2014, 17:42
quelle

2 Antworten

0

Ich denke immer noch, dass dies ein iOS-Bug 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 für beide Größenklassen unterschiedliche Konstanten, aber dies verursachte eine Ausnahme.

Als nächstes wurde versucht, verschiedene Breitenbeschränkungen zu verwenden. Einer wurde für kompakte Höhe installiert, der andere wurde für alles andere installiert. Dies war immer noch eine Ausnahme, obwohl die breaking constraint nicht installiert sein sollte.

Schließlich war die Lösung, die ich funktionierte, zwei Bildansichten, 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.

    
bugloaf 01.10.2014, 18:57
quelle
5

Ich bin auf dasselbe Problem gestoßen. 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 gemacht, 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 ich, wenn ich die Priorität der beanstandenden Einschränkung auf 999 im Interface Builder herabsetzte, nicht mehr den Constraint-Fehler in der Konsole bekam, wenn ich rotierte. :-) Und alles stimmt wieder mit der Welt.

    
CodenameDuchess 23.07.2015 14:24
quelle

Tags und Links