web-dev-qa-db-de.com

Wie können adaptive Xcode 6-Benutzeroberflächen mit iOS 7 und iOS 6 abwärtskompatibel sein?

Ich habe mir gerade das WWDC-Video 216 "Adaptive Benutzeroberfläche mit UIKit erstellen" angesehen.

Gegen 45:10 Uhr spricht Tony Ricciardi über Änderungen an IB in Xcode 6, um die neuen Änderungen zu unterstützen.

Er sagt "Sie können diese Dokumente rückwärts auf älteren Versionen von iOS bereitstellen".

(wobei "Diese Dokumente" vermutlich XIBs und Storyboards mit spezifischen Einstellungen für verschiedene Größenklassen bedeuten.)

Ich denke mir das nicht aus. Sehen Sie sich das WWDC-Video an.

Wie ist das möglich? Merkmalssammlungen und Größenklassen sind nur in iOS 8 definiert. Wie kann das Laufzeitverhalten, das von den für iOS 8 neuen UI-Konstrukten abhängt, in früheren iOS-Versionen funktionieren?

Wenn es ist möglich wäre, wäre es wunderbar. Sie können Apps erstellen, die unter iOS 6, 7 und 8 ausgeführt werden, und die neuen Funktionen für flexibles UI-Layout nutzen, die Apple zu Xcode 6 hinzugefügt hat. Ich habe eine adaptive UI-Logik erstellt Ich selbst im Code, und es ist ziemlich viel Arbeit.

137
Duncan C

Änderungen an der Benutzeroberfläche mit Größenklassen in Interface Builder werden auf iOS 7-Geräten und in der Vorschau in Xcode korrekt angezeigt. Ich habe beispielsweise einige Einschränkungen für das automatische Layout und die Schriftgröße für die reguläre Höhe und die reguläre Breite geändert. Diese geänderten Einschränkungen werden im iPad Simulator unter iOS 7.0 angezeigt.

Alle Größenklassenoptimierungen werden für iOS 7 verfügbar gemacht, mit Ausnahme von Größenklassen mit einer kompakten Höhe. Dies wurde von Apple und ist jetzt direkt in der Dokumentation angegeben:

Für Apps, die Versionen von iOS vor iOS 8 unterstützen, sind die meisten Größenklassen abwärtskompatibel.

Größenklassen sind abwärtskompatibel, wenn:
- Die App wurde mit Xcode Version 6 oder höher erstellt
- Das Bereitstellungsziel der App ist älter als iOS 8
- Größenklassen werden in einem Storyboard oder xib angegeben
- Der Wert der Höhenkomponente ist nicht kompakt

Da iOS 7 einige Größenklassen nicht berücksichtigt, treten bei deren Verwendung Probleme auf. Beispiel: Wenn Sie Compact w Any h definiert und dann Compact w Compact h definiert haben, wird unter iOS 7 das Compact w Any h respektiert, unter iOS 8 wird jedoch das Compact w Compact h-Erscheinungsbild wiedergegeben.

Wenn Sie also diese beiden Größenklassen verwenden und die Kompatibilität mit iOS 7 aufrechterhalten möchten, würde ich alle gewünschten Optimierungen für das iPhone im Querformat in Any w Any h oder Compact w Any h vornehmen und dann Ihre anderen Optimierungen für verschiedene Größenklassen durchführen Auf diese Weise müssen Sie keine Größenklasse mit kompakter Höhe verwenden und vermeiden Probleme.

151
Jordan H

Wenn Sie Ihre App auf iOS 7 bereitstellen, kompiliert Xcode Ihr Storyboard auf zwei verschiedene Arten:

  • Für das iPhone wird Ihr Storyboard als "Compact-Regular" (kompakte Breite, reguläre Höhe) kompiliert und als "~ iphone" -Feder verpackt.

  • Für das iPad wird Ihr Storyboard als "Regular-Regular" kompiliert und als "~ ipad" -Feder verpackt.

Wenn Sie also sowohl für iOS 7 als auch für iOS 8 bereitstellen möchten, sollten Sie Ihr Design auf die Größenklassen Compact-Any und Regular-Any konzentrieren. Auf diese Weise erhalten Sie die beste Erfahrung beim Anpassen der Benutzeroberfläche über die Bereitstellungsziele hinweg. Natürlich können Sie das Layout auch für andere Größenklassen ändern. Wenn diese Änderungen jedoch nicht für die Größenklassen Compact-Regular oder Regular-Regular übernommen werden, werden sie unter iOS 7 nicht angezeigt.

68
Dave DeLong

Hinweis: Diese Antwort war für eine Betaversion von Xcode 6 relevant und gilt nicht mehr für die Versandversion. Siehe Antworten von Joey und Dave DeLong auf dieser Seite für korrekte Informationen.

(ursprüngliche Antwort unten beibehalten):


Während Storyboards/XIBs, Das für die Verwendung von Größenklassen konfiguriert ist, unter iOS 7 Ausgeführt wird, berücksichtigt das Betriebssystem diese size classes Derzeit nicht und verwendet anscheinend die Standardgrößenklasse "Beliebig/Beliebig".

Ich bin damit einverstanden, dass die Folie, auf die Sie sich beziehen, eine solche Kompatibilität verspricht, aber dies scheint derzeit nicht der Fall zu sein (Xcode 6 beta 2).

Zum Testen habe ich ein Projekt (iOS 8 SDK, deployment target of 7.1) Mit einer einzigen Schaltfläche erstellt, die in der Größenklasse Beliebig/Beliebig zentriert vertically and horizontally Ist, aber in der Größenklasse Kompakt/Kompakt an der oberen linken Ecke ausgerichtet ist (z. B. iPhone in Landschaft). Der Vorschau-Assistent von Xcode zeigt, dass die Schaltfläche ihre Position in iOS 8, Aber nicht in iOS 7 Ändert. Ich habe dieses Verhalten auch auf einem iOS 7 - Gerät bestätigt.

27
remmah

Da in einigen Antworten und Kommentaren die Art der Abwärtskompatibilität erörtert wurde, dachte ich, ich würde einen Auszug direkt aus der Apple-Dokumentation freigeben:

~~~~~

Bereitstellen einer App mit Größenklassen in früheren iOS-Versionen

Für Apps, die iOS-Versionen vor iOS 8 unterstützen, sind die meisten Größenklassen abwärtskompatibel.

Größenklassen sind abwärtskompatibel, wenn:

  • Die App wurde mit Xcode Version 6 oder höher erstellt
  • Das Bereitstellungsziel der App ist älter als iOS 8
  • Größenklassen werden in einem Storyboard oder einer xib angegeben
  • Der Wert der Höhenkomponente ist nicht kompakt

~~~~~

Dieser letzte Aufzählungspunkt zielt auf diese Diskussion ab, wobei Apple bestätigt, dass solange "kompakte Höhe" nicht used , sollte die Abwärtskompatibilität erhalten bleiben.

Hoffe das hilft jemandem!

12
radiovisual

Während ich mich mit dem ähnlichen Thema beschäftigte, fand ich eine andere Antwort, die ich hier noch nicht gesehen habe. Es sieht so aus, als ob Größenklassen in XIB -Dateien überhaupt nicht funktionieren. Wenn ich einen Zellprototyp in der Datei storyboard erstelle, funktioniert dies in iOS7, wie in anderen Antworten erläutert. Wenn jedoch dieselbe Prototypzelle in separate Klassen mit der Dateigröße XIB verschoben wird, werden diese Klassen in iOS7 ignoriert.

Hier ist ein Link zum Beispielprojekt, das dieses Verhalten demonstriert: https://dl.dropboxusercontent.com/u/6402890/testSizeClasses.Zip

In der Prototypzelle habe ich vier Einschränkungen von jedem Rand der grauen Ansicht. Jeder von ihnen ist auf dieselbe Weise konfiguriert: Beliebig/Beliebig - 10, Normal/Normal - 20

enter image description here

In iOS8-Simulator funktioniert dies sowohl für XIB als auch für Storyboard. In iOS7 werden nur die in Storyboard definierten Zellen auf dem iPad mit den folgenden Einschränkungen aktualisiert:

enter image description here

3
sha

Wenn es jemandem Zeit spart, glaube ich , dass die Art und Weise, wie Xcode 6 für Größenklassen Quasi-Rückwärtskompatibilität bietet, über das historische ~ipad und ~iphone Storyboards mit Suffix und sonst nichts. Dies ist sinnvoll, da Größenklassen eine abstraktere Art sind, wie wir zuvor ein iPad-Storyboard und ein iPhone-Storyboard definiert haben.

Deshalb:

  • Wenn Sie Größenklassen verwenden möchten, um Gerätefamilien-spezifische Layouts (iPad oder iPhone) zu unterstützen, haben Sie Glück: Größenklassen sind eine schönere Schnittstelle zu der zuvor unterstützten Methode.

  • Wenn Sie Größenklassen verwenden möchten, um geänderte Layouts für verschiedene Modelle innerhalb der gleichen Gerätefamilie zu unterstützen, d. H. iPhone 5/6/6 + inc. Landschaft, dann haben Sie kein Glück . Um diese zu verwenden, ist mindestens ein iOS 8-Bereitstellungsziel erforderlich.

2
Jonathan Crooke

Leider funktionieren die Antworten von Dave und Joey bei mir nicht. Ich darf in diesem Thread keine Kommentare abgeben, bitte verzeihen Sie mir, wenn dies der falsche Ort ist.

Ich habe mir dazu eine spezielle Frage ausgedacht: Beispiel für eine adaptive Benutzeroberfläche für das iPhone-Hochformat, die mit iOS 7 abwärtskompatibel ist

Nach dem, was ich bisher gelernt habe, glaube ich jetzt, dass es, wie in meinem Beispiel, nicht möglich ist, im Hoch- und Querformat mit dem iPhone iOS7 zwei separate, unterschiedliche Einschränkungen für ein UI-Element basierend auf den Größenklassen festzulegen. Würde mich freuen, wenn ich mich irre.

1
Tom Major

@lducool - Ändern Sie im Interface Builder im Identitätsinspektor 'Builds For' in iOS 7.1 und höher.

1
Ash R