Wie kann ich Constraints AutoLayout verwenden, um ein anderes Layout im Landscape- gegenüber im Portrait-Modus anzugeben, ohne Code zu verwenden?

8

Ich habe eine iPad-App mit einem Login-Bildschirm mit den Login-Steuerelementen in einer UIView.

Wenn sich das iPad im Hochformat befindet, habe ich den Login UIView in der Mitte und unten in der App, ziemlich genau über der Tastatur und das Firmenlogo befindet sich in einem UIImageView, das in der Mitte zentriert ist. Ich verwende AutoLayout-Einschränkungen, um das Unternehmenslogo nach oben und nach rechts zu ziehen, und die Login-UIView zog nach unten und rechts.

Ссылка

Wenn ich dies in die Landschaft drehe, ist der Effekt ungefähr so:

Ссылка

Ich möchte, dass es so aussieht

Ссылка

Ich möchte also, dass die beiden Elemente nebeneinander liegen, und ich möchte, dass sich die Login-UIView weiter rechts befindet. Der Abstand rechts von der UIView im Hochformat ist größer als im Querformat, und der Abstand von unten ist geringer als im Querformat. Ich könnte das über "center in container" erledigen, aber das funktioniert auch nicht im Landscape-Modus.

Ich habe die Technik in diesem Post , um Dinge im Querformat" Seite an Seite "zu sein, aber ich glaube nicht, dass es hier genügen wird, weil ich die Layouts innerhalb der" Ansichten "möchte auch bei Rotation anders sein.

Ich kann mir vorstellen, wie ich das programmatisch abstellen kann, aber ich kann mir nicht vorstellen, dass dies ein so einzigartiges Bedürfnis ist. Gibt es also einen Weg, nur Einschränkungen in IB zu nutzen, um das zu erreichen? Einige "das ist, was Beschränkungen in IB für" Weg entworfen wurden, möglicherweise mit Prioritäten arbeitend? Oder muss ich das nur im Code abziehen?

    
Tom Kidd 14.10.2013, 16:05
quelle

2 Antworten

5

Sie können ein solches Verhalten unter Verwendung unterschiedlicher Prioritäten für Einschränkungen in Interface Builder erzielen. Für beide Ansichten ("Firmenlogo" und "Anmeldungsansicht") müssen Sie die Beschränkungen "vertikales Zentrum im Container" und "horizontales Zentrum im Container" mit etwas reduzierter Priorität einrichten. Als nächstes müssen Sie die Beschränkungen "Vertikaler Raum" und "horizontaler Raum" definieren, indem Sie Regeln mit Beziehungen wie "Weniger als oder gleich" verwenden.

Ich habe ein solches Verhalten nur mit dem Interface Builder erreicht.

Sie können auch "kleiner als oder gleich" mit "größer als oder gleich" kombinieren, indem Sie verschiedene Prioritäten verwenden, um das beste Ergebnis zu erzielen.

    
yas375 21.11.2013 11:01
quelle
0

Anstatt die Elemente neu zu positionieren, sieht es so aus, als müssten Sie sie nur einzeln drehen. Richten Sie sie in einer Containeransicht ein, zentrieren Sie die Containeransicht in der View-Controller-Ansicht. Dann richten Sie einfach den Abstand zwischen den beiden Ansichten ein und richten Sie die Autorotation auf ihnen ein.

    
coneybeare 14.10.2013 16:21
quelle