Layoutprobleme nach dem Update auf Xcode 8


102

Hier ist ein Vorher und Nachher eines meiner Bildschirme, nachdem ich auf Xcode 8 aktualisiert habe.
Alles, was ich getan habe, war mein main.storyboard zu öffnen und von dort aus habe ich meine App auf meinem Handy erstellt und ausgeführt.
In meiner Versionskontrolle kann ich sehen, dass Xcode viele Änderungen an meinem main.storyboard vornimmt, nur weil ich es öffne.
Immer wenn ich diese Änderungen lösche, kann ich sehen, was ich in Xcode 7.3.1 sehe.
Sobald ich jedoch den Interface Builder mit meinem Storyboard wieder öffne, werden diese Änderungen wieder wirksam.

Kann ich hier etwas tun?

Vor Xcode 8

Geben Sie hier die Bildbeschreibung ein

Nach dem Update auf Xcode 8

Geben Sie hier die Bildbeschreibung ein


Versuchen Sie, XCode 8 erneut mit einer neuen Quelle zu öffnen (speichern Sie alle zuvor vorgenommenen Änderungen). Wenn Sie nun das Storyboard öffnen, markieren Sie alle Elemente Ihrer Benutzeroberfläche und klicken Sie auf "Frames aktualisieren". Dies könnte Ihr Problem beheben.
d1str0

6
Könnten Sie einen Fehler unter bugreport.apple.com melden und das Storyboard anhängen, für das dies geschieht? Wir möchten dies weiter analysieren.
Quinn Taylor

1
Ich habe genau das gleiche Problem. Nachdem ich mein Storyboard in Xcode8 geöffnet und den Dialog "Erste Geräteansicht auswählen" akzeptiert habe, verhält sich alles seltsam. Wenn ich alle Frames aktualisiere, sieht der IB gut aus, aber nach dem Erstellen ist die App völlig kaputt. Getestet mit 4 Apps.
Cherrypig

@QuinnTaylor Ich habe ein ähnliches Problem. Nachdem Xcode 8 mein Storyboard konvertiert hat, zeigen die UIImageViews in UITableViews keinen Inhalt an, obwohl ihre Gliederung in sichtbar ist Debug View Hierarchy. Andere Objekte derselben Klasse, die sich in UICollectionViews befinden, sind nicht betroffen.
Manuel

XIB oder Storyboard setzen standardmäßig ältere Version 7.x und Speichern und schließen. Temporäre Lösung, funktioniert aber. Öffnen Sie nicht mehr, sobald Sie Speichern und Schließen abgeschlossen haben. Andernfalls müssen Sie von Anfang an dieselben Schritte ausführen.
Bhavesh Kumbhani

Antworten:


111

Ich hatte ein ähnliches Problem mit Tabellenansichtsbildern, die nicht angezeigt wurden, nachdem ich die Storyboard-Datei in Xcode8-kompatibel konvertiert hatte. Dies sieht aus wie ein Fehler mit Xcode8. Bis eine Fehlerbehebung veröffentlicht wird, können Sie Folgendes umgehen:

  1. Öffnen Sie Ihr Storyboard in Xcode 8 und wählen Sie eine erste Geräteansicht. Nehmen Sie die Änderungen wie gewohnt vor.
  2. Wenn Sie Ihre Änderungen abgeschlossen haben, wählen Sie das Storyboard -> Dateiinspektor -> Öffnet in -> Wählen Sie 'Xcode 7.x'.

Geben Sie hier die Bildbeschreibung ein

  1. Wählen Sie "Speichern und schließen", wenn Sie dazu aufgefordert werden
  2. Ihre Storyboard-Änderungen werden gespeichert und Ihr Storyboard funktioniert wie vor Xcode8.

Wenn Sie weitere Änderungen an der Storyboard-Datei vornehmen müssen, führen Sie diese Schritte erneut aus.


Wow +1 dafür sicher. Ich hatte in iOS 10 innerhalb meiner TodayExtension damit zu kämpfen. Erst als ich die Dinge eingegrenzt und die Git-Unterschiede analysiert habe, habe ich gesehen, dass verdächtige Storyboard-XML-Änderungen von Xcode 8 hinzugefügt wurden. Nachdem ich das Storyboard-Dokument für Xcode 7 gespeichert habe (nachdem ich meine Änderungen vorgenommen habe), kann ich jetzt mit erstellen und versenden Xcode 8 für iOS 10. Danke.
John Erck

Es sieht sicher nach einem Fehler aus. Speichern unter Öffnet in Xcode 7.x hat bei mir als vorübergehende Problemumgehung funktioniert.
Steve A

Ich habe die letzten 3 Tage damit verbracht, das kaputte Layout von Ort zu Ort in Xcode8 zu reparieren, bis ich diesen Beitrag gefunden habe. Ich sollte wahrscheinlich Leuten wie euch mehr vertrauen als Apple. Ich kann nicht glauben, dass dies so viel Zeit verschwendet hat. Vielen Dank David dafür!
Xu Yin

@XuYin Sollten wir das für jedes Storyboard tun? Ich meine, was ist, wenn ich ein anderes Storyboard in meinem Projekt habe? Was ist mit Xib-Dateien? soll ich es auch für diese tun?
Honig

@Honey Ich habe das nicht auf dem Storyboard gemacht, aber ich habe es auf jeder XIB-Datei gemacht, mit der ich Probleme habe. Aber ich denke, Sie möchten es vielleicht auch im Storyboard ausprobieren, wenn Sie ein seltsames Layoutproblem sehen. da dieser Fix nur 5 Sekunden dauert. und nach dem Neuerstellen der App sollten Sie in der Lage sein, das Update sehr schnell zu sehen.
Xu Yin

14

XIB oder Storyboard setzen standardmäßig ältere Version 7.x und Speichern und schließen. Temporäre Lösung, funktioniert aber. Öffnen Sie nicht mehr, sobald Sie Speichern und Schließen abgeschlossen haben. Andernfalls müssen Sie von Anfang an dieselben Schritte ausführen.Geben Sie hier die Bildbeschreibung ein


6
Das hilft nicht, weil ich an der Datei arbeiten muss. Dazu wird lediglich die Datei aus Gründen der Abwärtskompatibilität gespeichert. Es erlaubt nicht, dass die XIB in Xcode 8 bearbeitet wird.
Jowie

Ich mache das, aber wieder, wenn ich XIB-Datei in Dropdown-Liste auswähle, zeigt es nur Xcode 8.0 ...
Jayant Rawat

8

Eh das gleiche Problem. Ich habe es teilweise geschafft, es auf folgende Weise zu beheben ( behoben für Xcode Version 8.1 (8B62) )

In der Dokumentskizze von Storyboard habe ich auf jede Szene geklickt, in der der gelbe Pfeil auf einige Layoutprobleme hinweist (Nummer 1 im Screenshot).

Danach musste ich für jede problematische Szene auf das kleine Symbol "Frames aktualisieren" (Nummer 2 auf dem Screenshot) klicken, um alle Layoutprobleme pro Szene zu beheben.

Geben Sie hier die Bildbeschreibung ein

Eine Szene in meinem Fall war jedoch nach dem Übergang von Xcode7 zu Xcode8 immer noch im Weinen. Ich musste es manuell beheben, indem ich Einschränkungen anpasste oder fehlende Einschränkungen hinzufügte.

Puh, keine schöne Überraschung von XCode8 und Storyboards. Wenn Sie den AppCode-Editor verwendet haben, treten solche Probleme nicht auf, da er keine Storyboards unterstützt

Viel Glück!



6

Bitte folgen Sie den Threads für eine mögliche Lösung: (Ich glaube, es passiert vielen Entwicklern).
Xcode 8 GM Seed Storyboard-Problem
Xcode 8 - Frühere Storyboards wurden verzerrt

(ich habe jede beliebige Breite 600 verwendet). Als Xcode auf Xcode 8 aktualisiert wurde, wurden alle meine ViewController-Größen geändert. Infolgedessen wurde das gesamte Layout verzerrt.
Derzeit sehe ich nur 3 Lösungen für das Problem (ich würde nicht darauf vertrauen, bald auf eine Lösung zu warten).

1.Gehen Sie für jeden Viewcontroller und beheben Sie ihn durch Update Frames .

2.Gehen Sie zum Haupt-ViewController, Size Inspector -> Freeform -> 600da davon ausgegangen wird, dass die meisten Controller die Größe für alle ändern. (Achten Sie auf die Auswirkungen der neuen Funktionen, die Apple einführen möchte.)

3. Verwerfen Sie die Änderungen in Git für das Storyboard (ich würde es nicht vorschlagen, da Apple auch einige Updates eingefügt hat, die für Xcode wichtig sein können).

Zusätzlicher Link für die neuen AutoLayout-Funktionen in Xcode 8 (WWDC16): Apps adaptiv machen, Teil 1


1
Option 1 ist am sinnvollsten und hat bei mir funktioniert. Wie Mike.R bemerkt, sollten Sie darauf achten, XCode nicht dazu zu bringen, Probleme zu beheben, da weitere Probleme auf der Strecke unvermeidlich sind.
Arcady Bob

Ich habe auch Option 1 verwendet (ich denke, es ist sicherer). Aber es ist zeitaufwändig.
Mike.R

5

In meinem Fall funktionieren die von Akhil Kateja vorgeschlagenen Lösungen, und ich muss auch Breite und Höhe der Hauptansicht zurücksetzen:

1) Stellen Sie die Ansichtsgröße auf Freiform ein

Geben Sie hier die Bildbeschreibung ein

2) Setzen Sie Breite und Höhe der Ansicht auf die ursprüngliche Größe zurück:

Geben Sie hier die Bildbeschreibung ein

Zum Schluss speichern und fertig.


4

Für mich bestand die Lösung darin, einfach auf den UIViewController zu klicken, der Probleme hatte, und dann Editor > Resolve Auto Layout Issues > All Views In ... > Updates Frames

Die Ansichten wurden neu angeordnet, um sie an die vorhandenen Einschränkungen anzupassen, basierend auf der neu ausgewählten Standardansicht (in meinem Fall iPhone 7).

Beachten Sie auch: Wenn Sie wie ich eine Warnung für eine falsch platzierte Navigationsleiste erhalten , wählen Sie einfach den UINavigationController / UIViewController aus und schalten Sie ihn dann aus Attributes Inspector > Bar Visibility > Shows Navigation Barund wieder ein.


3

Das Festlegen der Ansichtsgröße auf Freiform von Inferred hat bei mir funktioniert. Sie finden es unter der Überschrift Simulierte Metriken im Attributinspektor .


3

Ich hatte das gleiche Problem und habe es durch erzwungenes Aktualisieren der Ansichtsbeschränkungen des Controllers gelöst. Fügen Sie den folgenden Code in Ihre viewDidLoad () - Funktion ein

self.view.layoutIfNeeded()

1
Prost Bill! das 'layoutIfNeeded' hat bei mir funktioniert! (Nachdem ich stundenlang alles andere ausprobiert habe ..)
Ethan Halprin

3

Ich habe jeden Controller ausgewählt und auf "Frames aktualisieren" geklickt und das Layout korrigiert.


3

Die Antwort von @ david-truong ( https://stackoverflow.com/a/39589860/1407528 ) funktioniert in meinem Fall nicht. Wenn Sie sich also in derselben Situation befinden, versuchen Sie Folgendes :

Wenn Sie alle Ihre Geräte auf iOS 10+ aktualisiert haben, erkennt diese Version von Xcode diese Geräte nicht als kompatible Geräte. Versuchen Sie es mit diesem Trick:

  • Gehen Sie zu: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • Kopieren Sie die mit iOS 10 oder 10.1 verbundenen Ordner nach: / Applications / Xcode 7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • Öffnen Sie das Projekt mit Xcode 7.3.1 (starten Sie Xcode neu, wenn Sie es bereits geöffnet haben)
  • Wählen Sie Ihr verbundenes iOS 10+ Gerät aus
  • Drücken Sie Run

Hinweis: Neue Funktionen wie Swift sind mit diesem Trick nicht verfügbar, Sie sollten jedoch in der Lage sein, Ihr Projekt zu laden und zu erstellen.


3

Hoffe das wird helfen

Wenn ich Xcode von 7.3 auf Xcode 8 aktualisiert und die App ausgeführt habe, werden einige der Ansichten perfekt angezeigt, andere jedoch verzerrt. Dann habe ich die NIB-Datei überprüft und mich aufgefordert, eine bestimmte Gerätegröße auszuwählen und dann die Nib entsprechend anzuzeigen Gerätegröße, die natürlich nicht ist Any-Any(Xcode 7.3) . Daher werden nicht alle NIBS-Dateien korrekt angezeigt.

Lösungsarbeit von mir: - Drücken Sie den gelben Pfeil wie im Bild unten gezeigt

Geben Sie hier die Bildbeschreibung ein

Es wird ein Popup angezeigt, in dem Optionen wie angezeigt werden

Geben Sie hier die Bildbeschreibung ein

Wählen Sie Update Framesmit Apply to all views in containerchecked.it werden etwa 90% der verzerrten Benutzeroberfläche gelöst, und der Rest des Problems mit den Einschränkungen für das automatische Layout kann manuell gelöst werden.


Dies könnte auch Layouts verderben. IMHO muss dies mit viel Sorgfalt erfolgen, eine Ansicht nach der anderen und prüfen, ob die Dinge geklappt haben, bevor Sie fortfahren.
Brainray

Ja, natürlich müssen Sie etwas Zeit dafür aufwenden, und diese Lösung kann Ihnen auf längere Sicht helfen, wenn Sie einige Ihrer Benutzeroberflächen aktualisieren möchten.
Anurag Bhakuni

1

Ich habe das Problem mit Xcode Version 7.3.1 behoben. Sie können die .dmg-Datei vom Apple Developer Portal herunterladen. Ich habe die automatische Größenanpassung in jeder App verwendet und sie funktioniert hervorragend für mich. Ich werde nur dann auf Xcode 8 aktualisieren, wenn sie diesen Fehler beheben können.

Laden Sie es hier herunter: https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg


Diese Lösung ist nutzlos, wenn Sie iOS 10
jungledev

1

Um ein ähnliches Problem zu beheben, habe ich die xib als Freiform (nicht abgeleitet) konfiguriert UND die xib-Datei als Xcode 7.x-kompatibel gespeichert. In meinem Fall waren beide Schritte erforderlich. Ich hoffe das hilft!


1

Ich bemerke eine neue Schaltfläche in Xcode 8.2 (überprüfen Sie den orangefarbenen Kreis im Bild). Es wird Ihnen etwas Hilfe geben.

Schritte: 1. Öffnen Sie das Storyboard und wählen Sie ein beliebiges Gerät aus. 2. Wählen Sie einfach den View Controller aus. 3. Klicken Sie auf die genannte Schaltfläche (wie in Abbildung). 4. Der Frame für diesen View Controller wird aktualisiert, und Sie können fortfahren

Ich habe keine bessere Lösung gefunden. Bitte antworten Sie, wenn Sie eine gefunden haben.

IB Screenshot


Es ist nichts passiert.
Muju

0

Aktualisierungsbeschränkungen und Layout-Unteransichten in viewdidload lösen das Problem

- (void) viewDidLoad {
        [self.view updateConstraints];
        [self.view layoutSubviews];
        [super viewDidLoad];
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.