Ich habe gerade das WWDC-Video Nr. 216 "Erstellen einer adaptiven Benutzeroberfläche mit UIKit" gesehen.
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 für ältere Versionen von iOS bereitstellen."
(wobei "Diese Dokumente" vermutlich XIBs und Storyboards bedeuten, die spezifische Einstellungen für verschiedene Größenklassen haben.)
Ich mache das nicht nach. 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 UI-Konstrukten abhängt, die für iOS 8 neu sind, in früheren iOS-Versionen funktionieren?
Wenn es ist möglich , es wäre sehr schön sein. Sie können Apps erstellen, die unter iOS 6, 7 und 8 ausgeführt werden, und die neuen flexiblen UI-Layout-Funktionen nutzen, die Apple Xcode 6 hinzugefügt hat. Ich habe selbst adaptive UI-Logik im Code erstellt, und das ist ziemlich viel der Arbeit.
quelle
Antworten:
Änderungen an der Benutzeroberfläche mit Größenklassen im Interface Builder werden auf iOS 7-Geräten und in der Vorschau in Xcode korrekt angezeigt. Zum Beispiel habe ich einige Einschränkungen für das automatische Layout und Schriftgrößen für die reguläre Höhe und die reguläre Breite geändert. Diese geänderten Einschränkungen sind im iPad Simulator unter iOS 7.0 sichtbar.
Alle Größenklassenoptimierungen werden iOS 7 zur Verfügung gestellt, mit Ausnahme von Größenklassen mit einer kompakten Höhe. Dies wurde von Apple bestätigt und ist jetzt direkt in der Dokumentation angegeben :
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 mit Xcode Version 6 oder höher erstellt wurde
- das Bereitstellungsziel der App früher als iOS 8 ist
- Größenklassen in einem Storyboard oder xib angegeben werden
- Der Wert der Höhenkomponente nicht kompakt ist
Da iOS 7 einige Größenklassen nicht berücksichtigt, treten bei 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 berücksichtigt, unter iOS 8 wird jedoch das Erscheinungsbild Compact w Compact h wiedergegeben.
Wenn Sie also diese beiden Größenklassen verwenden und die Kompatibilität mit iOS 7 beibehalten 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.
quelle
Compact-Compact
wird nicht für iOS 7 exportiert;Compact-Regular
ist. Siehe meine Antwort für weitere Details.Wenn Sie Ihre App für iOS 7 bereitstellen, kompiliert Xcode Ihr Storyboard auf zwei verschiedene Arten:
Für das iPhone wird Ihr Storyboard als "Compact-Regular" (Kompakte Breite, normale Höhe) kompiliert und als "~ iphone" -Spitze verpackt.
Für das iPad wird Ihr Storyboard als "Regular-Regular" kompiliert und als "~ ipad" -Spitze 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 hinsichtlich der Anpassung der Benutzeroberfläche über Bereitstellungsziele hinweg. Sie können das Layout natürlich auch für andere Größenklassen ändern. Wenn diese Änderungen jedoch nicht auf die Größenklassen Compact-Regular oder Regular-Regular angewendet werden, werden diese Änderungen unter iOS 7 nicht angezeigt.
quelle
Hinweis: Diese Antwort war für eine Beta-Version von Xcode 6 relevant und gilt nicht mehr für die Versandversion. Die richtigen Informationen finden Sie in den Antworten von Joey und Dave DeLong auf dieser Seite.
(ursprüngliche Antwort unten beibehalten):
Während die
Storyboards/XIBs
Konfiguration für die Verwendung von Größenklassen ausgeführt wirdiOS 7
, berücksichtigt das Betriebssystem diese derzeit nichtsize classes
und scheint die Standardgrößenklasse "Beliebig / Beliebig" zu verwenden.Ich bin damit einverstanden, dass die bestimmte Folie, auf die Sie sich beziehen, eine solche Kompatibilität zu versprechen scheint, 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 einzelnen Schaltfläche erstellt, dievertically and horizontally
in der Größenklasse Beliebig / Beliebig zentriert ist , aber in der Größenklasse Kompakt / Kompakt (z. B. iPhone im Querformat) an der oberen linken Ecke ausgerichtet ist. Der Vorschau-Assistent von Xcode zeigt an, dass die Schaltfläche ihre Position ändertiOS 8
, jedoch nichtiOS 7
. Ich habe dieses Verhalten auch auf einemiOS 7
Gerät bestätigt .quelle
Da einige der Antworten und Kommentare die Art der Abwärtskompatibilität erörterten, dachte ich, ich würde einen Auszug direkt aus der Apple-Dokumentation veröffentlichen :
~~~~~
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:
~~~~~
Dieser letzte Aufzählungspunkt zielt auf diese Diskussion ab, bei der Apple bestätigt, dass die Abwärtskompatibilität beibehalten werden sollte , solange "kompakte Höhe" nicht verwendet wird.
Hoffe das hilft jemandem!
quelle
Während ich mich mit dem ähnlichen Problem befasste, fand ich eine andere Antwort, die ich hier noch nicht gesehen habe. Es sieht so aus, als würden Größenklassen in
XIB
Dateien überhaupt nicht funktionieren. Wenn ich einenstoryboard
Zellenprototyp in der Datei erstelle, funktioniert dies in iOS7, wie in anderen Antworten erläutert. Wenn jedoch dieselbe Prototypzelle in separateXIB
Dateigrößenklassen verschoben wird, werden sie in iOS7 ignoriert.Hier ist ein Link zu dem 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. Jedes der ist auf die gleiche Weise konfiguriert: Beliebig / Beliebig - 10, Normal / Normal - 20
Es funktioniert gut im iOS8-Simulator für XIB und Storyboard, und in iOS7 werden nur in Storyboard definierte Zellen auf dem iPad aktualisiert:
quelle
Wenn es jemandem Zeit spart, glaube ich , dass die Art und Weise, wie Xcode 6 quasi Abwärtskompatibilität für Größenklassen bietet, über die historischen
~ipad
und~iphone
angehängten Storyboards erfolgt und nicht mehr. Dies ist sinnvoll, da Größenklassen eine abstraktere Methode sind, wie wir zuvor ein iPad-Storyboard und ein iPhone-Storyboard definiert haben.Deshalb:
Wenn Sie Größenklassen verwenden möchten, um gerätefamilienspezifische Layouts (iPad oder iPhone) zu unterstützen, haben Sie Glück: Größenklassen sind eine bessere Schnittstelle zu der zuvor unterstützten Methode.
Wenn Sie Größenklassen verwenden möchten, um geänderte Layouts für verschiedene Modelle innerhalb derselben Gerätefamilie zu unterstützen, z . iPhone 5/6/6 + inc. Landschaft, dann hast du kein Glück . Die Verwendung dieser würde ein Mindestziel für die Bereitstellung von iOS 8 erfordern.
quelle
@lducool - Ändern Sie im Interface Builder im Identitätsinspektor 'Builds For' in iOS7.1 und höher.
quelle
Leider funktionieren die Antworten von Dave und Joey bei mir nicht. Ich darf in diesem Thread keine Kommentare abgeben. Bitte vergib mir, wenn dies der falsche Ort ist.
Ich habe mir dafür eine spezielle Frage gestellt: Beispiel für eine adaptive Benutzeroberfläche im iPhone-Hochformat, die abwärtskompatibel mit iOS 7 ist
Nach dem, was ich bisher gelernt habe, glaube ich jetzt, dass es wie in meinem Beispiel nicht möglich ist, zwei separate, unterschiedliche Einschränkungen für ein UI-Element im Hoch- und Querformat mit dem iPhone iOS7 basierend auf Größenklassen festzulegen. Würde mich aber freuen, wenn ich mich irre.
quelle