2

Ich habe einen View-Controller mit Interface Builder erstellt, während die Größenklassen aktiviert sind.Warum UIView breiter ist als Bildschirm

Die Ansicht hat führende und nachlaufende Einschränkungen für ihre Superansicht, die die Sicht des View-Controllers ist. etwas wie das.

| - (14) - (anzeigen) - (14) - |

Wenn ich die App laufen sieht es gut aus, die Ansicht hat diese 14pt-Einsätze auf beiden Seiten, obwohl, wenn ich es Breite drucke ich 576, die breiter ist als die Bildschirmbreite. Im Schnittstellen-Generator ist die Rahmenbreite der Ansicht auf 576 festgelegt (wie die Zeichenbereichsgröße, wenn Größenklassen aktiviert ist), aber zur Laufzeit sollten die Einschränkungen dies überschreiben, denke ich.

Wie kommt die Ansicht erscheint richtig, aber es ist Frame zeigt eine größere Breite?

Antwort

1

Wann haben Sie die Breite gedruckt?. Ich denke in ViewDidLoad. Da Sie den Interface Builder verwenden und Größenklassen aktivieren, sind die Breite und Höhe standardmäßig 600x600. Zu dem Zeitpunkt, zu dem die Ansicht geladen wurde, bezieht sich die Größe immer noch auf die Größe aus dem Interface-Builder, bis die Ansicht angezeigt wurde. Sie wird automatisch entsprechend der Bildschirmgröße skaliert. Deshalb ist Ihre UIView breiter als der Bildschirm.

Hier ist, was ich aus einem View-Controller ausgedruckt habe, der mit Interface Builder erstellt wurde und Größenklassen aktiviert. Führen Sie auf dem iPhone 6S und

[Größe] im Blick haben Last {{0, 0}, {600, 600}}

[Größe] im Blick hat erscheinen {{0, 64}, {414, 623}}

0

können Sie die folgenden Methoden verwenden, um Ihre Ansicht zu aktualisieren:

// Hier können Sie das Layout durchzuführen, bevor der Zeichnungszyklus geschieht. layoutIfNeeded erzwingt Layout früh

[view setNeedsLayout];

[Ansicht layoutIfNeeded];

+0

Ich mache das schon –