2008-10-09 16 views
8

Ich habe eine Ansicht, die Querformat- und Hochformatansichten unterstützt, wobei sich die Steuerelemente beim Wechseln von einem zum anderen bewegen. Ich mache das gerade, indem ich die .center-Einstellung für jedes meiner Steuerelemente einstelle, wenn der Benutzer das Telefon dreht. Das Problem ist, dass dies mühsam ist und viel Code erfordert, und scheint den Zweck der Verwendung von Interface Builder in erster Linie zu besiegen.Was ist der beste Weg, um Landschaft/Porträt Unterschiede in IB zu behandeln?

Meine Frage ist: gibt es eine Möglichkeit im Interface Builder für eine Ansicht, mehrere Looks zu unterstützen (eine für Landscape One für Portrait)? Wenn nicht, wie machen andere Leute das mit IB? Richten Sie 2 Ansichten ein?

Edit: Just my Quer- und Hochformat anders aussehen zu klären, ich will keine gerade verwandeln, ich zeige die Daten tatsächlich unterschiedlich im Querformat

Antwort

0

Ich bin nicht 100% sicher, ob es möglich ist, Aber haben Sie darüber nachgedacht, verschiedene View-Controller für Quer- und Hochformat zu verwenden?

+0

@Colin: Wie würde das funktionieren? Bei einer Rotation müsste ich eine fallen lassen und die andere hinzufügen, was meiner Meinung nach bei der Bildschirmaktualisierung seltsame Dinge bewirken würde ... es würde auch bedeuten, dass ich eine gemeinsame Elternklasse einrichten und versuchen müsste, sie dazu zu bringen, Code zu teilen ... könnte sehr unordentlich werden – rustyshelf

1

Bei Bedarf füge ich UIView Objekte zu der Ansicht in IB hinzu, die ich ausgeblendet habe. Geben Sie ihm eine schöne Hintergrundfarbe, damit Sie es sehen können, und senden Sie es den ganzen Weg zum Hintergrund. Verwenden Sie dann den Rahmen dieser Ansicht, wenn Sie den Rahmen eines Objekts festlegen müssen. Wenn Sie viele davon haben, sollten Sie stattdessen UILabel verwenden, damit Sie ihm in IB einen sichtbaren Namen geben können.

Wenn Sie Speicherprobleme besorgt sind, entfernen Sie einfach alle diese zusätzlichen UIView s in ViewDidLoad und speichern nur die Rahmenwerte in Mitglied CGRect s. Dies funktioniert natürlich nur dann, wenn Sie keine der Ansichten automatisch in der Größe anpassen oder neu positionieren, was Sie in diesem Fall sowieso nicht tun sollten. Ich tue dies für die Größenänderung/Neupositionierung aus irgendeinem Grund, nicht nur wenn der Bildschirm rotiert.

0

Die AutoSize-Attribute von IBOutlet-Objekten im Größeninspektor von IB (Befehl 3) bieten einige sehr nützliche Optionen zum automatischen Strecken und Positionieren von Objekten. Sie können die L/R- und T/B-Bildschirmpositionen sowie die relative Breite und Höhe steuern. Sie können nicht die volle Kontrolle über das Layout bekommen, aber die meisten grundlegenden Operationen sind da.

0

Die einzige Möglichkeit, mehrere Ansichten in IB zu unterstützen, besteht darin, die Autosizing-Maske von Komponenten entweder auf Skalen und/oder an Kanten zu verankern. Um für jede Ausrichtung ein völlig anderes Layout zu erstellen, müssen Sie eine Hoch- und Querformatansicht separat (jeweils in einer eigenen XIB) entwerfen und zwischen ihnen programmatisch wechseln.