Xcode 6 Storyboard die falsche Größe?

139

Ich habe in Swift in Xcode 6 (Beta 1) ein neues Projekt von Grund auf neu erstellt und dabei ein seltsames Verhalten mit Storyboards und der von mir angezeigten Ausgabe festgestellt.

Ich habe eine einfache Oberfläche erstellt (wie unten gezeigt) - mit den Eigenschaften von View Controller. Wenn ich dies im Simulator ausführe, würde ich erwarten, dass "Hallo Welt" in der Benutzeroberfläche eine zentrale Rolle spielt. Es scheint jedoch, dass dieses "Quadrat" einfach in den iPhone-Bildschirm passt und daher die falsche Ansicht angezeigt wird (siehe unten) ).

Meine Frage ist: Hat jemand anderes dieses Verhalten gesehen und wie haben sie es behoben?

Vielen Dank!

Ansicht aus dem Storyboard-Editor

Attributinspektor

Größeninspektor

Simulatorausgabe

Zuckerwatte
quelle
Fügen Sie Einschränkungen für das automatische Layout hinzu, die das Problem beheben sollten. Sie entwerfen derzeit für alle Layouts, sodass Sie mit automatischen Layouts den Inhalt an der "richtigen" Stelle anzeigen können.
Raz
8
Tipps: Mit dem Assistenten-Editor> Automatisch> Vorschau können Sie eine Vorschau des Bildschirms mit allen Bildschirmgrößen sehen
Francescu

Antworten:

81

Während die Antwort von Asif Bilal eine einfachere Lösung ist, die keine Größenklassen beinhaltet (die in iOS 8 eingeführt wurden), wird dringend empfohlen, sich an Größenklassen zu gewöhnen, da diese die Zukunft sind, und Sie werden irgendwann trotzdem einspringen Punkt."


Sie haben die Layouteinschränkungen wahrscheinlich nicht hinzugefügt.

Wählen Sie Ihre Beschriftung aus und tippen Sie unten auf die Schaltfläche mit den Layoutbeschränkungen:

Geben Sie hier die Bildbeschreibung ein

Fügen Sie in diesem Menü Breite und Höhe hinzu (es sollte NICHT mit meiner identisch sein), indem Sie das entsprechende Kontrollkästchen aktivieren und auf Einschränkungen hinzufügen klicken. Ziehen Sie dann Ihre Beschriftung bei gedrückter Ctrl-Taste in Ihre Hauptansicht. Wenn Sie dann auf klicken, sollten Sie die Optionen haben, um horizontal und vertikal im Container zu zentrieren. Fügen Sie beide hinzu, und Sie sollten eingerichtet sein.

Kann Poyrazoğlu
quelle
1
Ausgezeichnet - das hat großartig für mich funktioniert - Vielen Dank für Ihre Hilfe (wird Ihre Antwort akzeptieren, wenn der Timer angehoben wird)
Candyfloss
1
Bitte schön. Dies ist das Standardverhalten bei Autolayout, das jetzt standardmäßig aktiviert ist. Denken Sie daran, dass es aufgrund möglicher unterschiedlicher Bildschirmgrößen / Layouts eine Möglichkeit geben sollte, zu berechnen, wo eine Ansicht relativ zu ihrer übergeordneten Ansicht positioniert wird, und das automatische Layout behebt dieses Problem. Wenn Sie diese Einschränkungen nicht hinzufügen, werden sie in der Ansicht zur Laufzeit automatisch erstellt, jedoch relativ zur oberen linken Ecke. Wenn Sie etwas anderes benötigen (Sie benötigen fast immer etwas anderes), müssen Sie die Einschränkungen explizit angeben.
Kann Poyrazoğlu
4
Beachten Sie, dass das Ziehen der Steuerung (was umständlich sein kann) nicht erforderlich ist. Die Schaltfläche links von der in diesem Bild ausgewählten öffnet ein Menü, in dem Sie die horizontalen und vertikalen Zentren festlegen können.
Jrturton
Sie haben Recht. Ich bin nur daran gewöhnt, das Ziehen zu steuern. Deshalb habe ich es so gesagt.
Kann Poyrazoğlu
@ CanPoyrazoğlu - Sie erwähnen "Wählen Sie Ihr Etikett." Welches Label? Ich habe das gleiche Problem mit einem neuen iPhone-Projekt, in dem ich keine Beschriftungen oder andere Elemente der Benutzeroberfläche habe. Mein erstes Projekt in Xcode 6 mit Objective C.
rattletrap99
253

Führen Sie die folgenden Schritte aus, um das Problem zu beheben

Wählen Sie im Storyboard eine beliebige Ansicht aus und wechseln Sie zum Dateiinspektor. Deaktivieren Sie das Kontrollkästchen "Größenklassen verwenden". Sie werden aufgefordert, die Größenklassendaten für: iPhone / iPad beizubehalten. Klicken Sie anschließend auf die Schaltfläche "Größenklassen deaktivieren". Dadurch wird die Ansichtsgröße des Storyboards mit dem ausgewählten Gerät geändert.

Asif Bilal
quelle
8
Dies ist die richtige Antwort, wenn Sie einen 600x600-View-Controller erhalten, wenn Sie beispielsweise einen Standard-View-Controller in iPhone-Größe wünschen.
Fraggle
5
Dies sollte die richtige Antwort sein (zumindest für diejenigen, die nur auf nicht-universellen Plattformen arbeiten)
Raptor
36
Ich weiß nicht, warum die Leute dies als richtige Antwort markiert haben ... die erste ist die Art und Weise, wie es gemacht werden sollte ... Wenn Sie Layoutbeschränkungen nicht mögen, gehen Sie in die umgekehrte Richtung ... Apple nutzt eine gute Möglichkeit, für alle Größen von iPhone und iPads zu entwickeln, und Sie möchten einfach zu den alten Sachen zurückkehren? Weil Sie es sich nicht leisten können, sich selbst zu aktualisieren? Nie abgelehnt, aber es scheint, dass diese Antwort die Leute verwirrt und dann den alten Ansatz verwendet (der veraltet sein wird), anstatt zu ermutigen, das neue Zeug zu verwenden ...
Raphael Ayres
3
Top Antwort für alle, die an iPhone / iPad Storyboards
gewöhnt sind
3
Verwenden Sie die Layout-Einschränkungen ... Apple macht das genauso wie Android. Die Ansicht hat keine Form ... Manchmal kann es schmerzhaft sein, aber wenn Sie die Größe erzwingen, sieht Ihre App auf verschiedenen Gerätegrößen schlecht aus. Wenn eine Schaltfläche in der unteren rechten Ecke angezeigt werden soll, erstellen Sie einfach zwei Einschränkungen und verbieten Sie ... keine X- oder Y-Auswahl. Alles wird von der Engine eingestellt. Verwenden Sie Eigengrößen. Nutze deine Vorstellungskraft. Verwenden Sie relationale Einschränkungen. Lerne das s ***.
Raphael Ayres
18

Wenn Sie Xcode 6 verwenden und für iOS 8 entwerfen, ist keine dieser Lösungen korrekt. Deaktivieren Sie keine Größenklassen, deaktivieren Sie keine abgeleiteten Metriken und legen Sie (noch) keine Einschränkungen fest, damit die Nur-iPhone-Ansichten die richtige Größe haben. Verwenden Sie stattdessen das Größenklassen-Steuerelement, eine leicht zu übersehende Textschaltfläche am unteren Rand des Interface Builder, die anfänglich "wAny hAny" lautet.

Klicken Sie auf die Schaltfläche und wählen Sie Kompakte Breite, Normale Höhe. Dadurch können Sie die Größe Ihrer Ansichten ändern und alle iPhone-Porträtausrichtungen abdecken. Apples Dokumente hier: https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/SelectingASizeClass.html oder suchen Sie unter "Auswählen einer Größenklasse in Interface Builder".

Eli Burke
quelle
Ich halte es für nützlich, die gesamte Hilfe zum Design von Größenklassen in Ihrem Link zu lesen , dh von Informationen zum Entwerfen für mehrere Größenklassen bis zum Bereitstellen einer App mit Größenklassen in früheren iOS-Versionen .
Franklin Yu
Dies ist eine großartige Lösung, wenn Sie das automatische Layout beibehalten möchten, die Storyboard-Ansichten jedoch als Quer- oder Hochformat anstelle eines Quadrats angezeigt werden sollen.
Stephenspann
5

Wählen Sie im Storyboard Ihren ViewController aus und wechseln Sie zum Atribute Inspector. Ganz oben haben Sie unter Simulierte Metriken die Eigenschaften Größe und Ausrichtung, die auf Abgeleitet gesetzt sind. Ändern Sie sie auf die gewünschten Werte.

Damit eine Anwendung auf einer anderen Bildschirmgröße ordnungsgemäß angezeigt wird, müssen Sie auch Einschränkungen einrichten, wie von Can Poyrazoğlu im ersten Beitrag beschrieben.

David Andrews
quelle
5

Ich hatte dieses Problem in xcode 6 und es gibt eine Möglichkeit, die Größenänderungskonflikte zu lösen. Wenn Sie Ihre Ansicht auswählen, sehen Sie unten ein Symbol, das wie | -Δ- | aussieht. Wenn Sie darauf klicken, wird die Größe Ihres Projekts für verschiedene Geräte geändert.

user2961953
quelle
Ja und nachdem Sie das Dreiecksymbol klicken Sie auf Fehlende Einschränkungen wählen und Boom Sie sind fertig Ansicht nach Gerätegröße verkleinern wird , wenn seine Universal - App
vishal dharankar
3

Gehen Sie zum Attributinspektor (rechte obere Ecke) in den simulierten Metriken, die die Eigenschaften Größe, Ausrichtung, Statusleiste, Obere Leiste und Untere Leiste haben. Ändern Sie für GRÖSSE Abgeleitet -> Freiform.

Rachel
quelle
+1 @Rachel danke für diesen hilfreichen kleinen Tipp zu simulierten Metriken -> Größe: "Freiform" (auch bekannt als "Aktivieren einer benutzerdefinierten Größe für eine wiederverwendbare XIB, die von einer benutzerdefinierten Ansicht unterstützt wird").
zweiwöchentlich
3

Gehen Sie auf Ihrer Storyboard-Seite zum Dateiinspektor und deaktivieren Sie "Größenklassen verwenden". Dadurch sollte Ihr View Controller auf die normale IPhone-Größe verkleinert werden, mit der Sie vertraut waren. Beachten Sie, dass Sie mit 'Größenklassen' Ihr Projekt auf vielen Geräten entwerfen können. Sobald Sie dies deaktivieren, gibt Ihnen der Xcode einen Warndialog wie folgt. Dies sollte selbsterklärend sein.

"Durch Deaktivieren von Größenklassen wird dieses Dokument auf das Speichern von Daten für eine einzelne Gerätefamilie beschränkt. Die Daten für die Größenklasse, die das Zielgerät am besten darstellt, werden beibehalten und alle anderen Daten werden entfernt. Außerdem werden Segmente in ihre Nicht-Daten konvertiert -adaptive Äquivalente. "

Oh mein
quelle
3

Für jeden, der XCode 7 verwendet, ist es sehr einfach, für eine bestimmte Gerätegröße zu entwerfen (anstelle der quadratischen Standardleinwand).

Wählen Sie im Interface Builder Ihren ViewController oder Ihre Szene aus dem linken Menü aus. Show the Attributes InspectorGehen Sie dann unter zu Simulated Metricsund wählen Sie das gewünschte Sizeaus dem Dropdown-Menü.

Priester
quelle
Damit können Sie nur in Ihrem Storyboard für dieses Gerät entwerfen. Wenn Sie Ihre App ausführen, kann das Design für verschiedene Bildschirmgrößen stark variieren.
Joey Tawadrous
@ JoeyTawadrous Genau. Aber es beantwortet die gestellte Frage :)
Priester
2

Sie werden wahrscheinlich das "Automatische Layoutprobleme beheben" (Symbol unten rechts - Dreieck in der Storyboard-Ansicht) verwenden, um vorgeschlagene Einschränkungen hinzuzufügen / zurückzusetzen (Xcode 6.0.1).

swnn
quelle