xcode6 - sur - Comment les interfaces utilisateur adaptatives Xcode 6 peuvent-elles être rétrocompatibles avec iOS 7 et iOS 6?




rétrocompatibilité xbox one comment ça marche (6)

Je viens de regarder la vidéo # 216 de la WWDC, "Construire l'interface utilisateur adaptative avec UIKit".

Vers 45:10, Tony Ricciardi parle des changements à IB dans Xcode 6 pour supporter les nouveaux changements.

Il dit "Vous pouvez déployer ces documents en arrière sur les anciennes versions d'iOS".

(où "Ces documents" signifie probablement XIBs et storyboards qui ont des paramètres spécifiques pour différentes classes de taille.)

Je ne fais pas ça. Allez voir la vidéo WWDC.

Comment est-ce possible? Les collections de caractères et les classes de taille ne sont définies que dans iOS 8. En quoi le comportement d'exécution dépendant des constructions d'interface utilisateur qui sont nouvelles pour iOS 8 est-il compatible avec les versions précédentes d'iOS?

Si c'est possible, ce serait merveilleux. Vous pouvez créer des applications qui s'exécuteront sur iOS 6, 7 et 8 et profiter des nouvelles fonctionnalités de mise en page de l'interface utilisateur qu'Apple a ajoutées à Xcode 6. J'ai créé moi-même la logique de l'interface utilisateur adaptative dans le code. de travail.


@lducool - Dans le générateur d'interface, dans l'inspecteur d'identité, remplacez «Builds For» par iOS7.1 et versions ultérieures.


Comme certaines des réponses et des commentaires discutaient de la nature de la rétrocompatibilité, j'ai pensé partager un extrait directement de la documentation d'Apple :

~~~~~

Déploiement d'une application avec des classes de taille sur des versions antérieures d'iOS

Pour les applications prenant en charge les versions d'iOS antérieures à iOS 8, la plupart des classes de taille sont rétrocompatibles.

Les classes de taille sont rétrocompatibles lorsque:

  • L'application est construite en utilisant Xcode version 6 ou ultérieure
  • La cible de déploiement de l'application est antérieure à iOS 8
  • Les classes de taille sont spécifiées dans un storyboard ou un xib
  • La valeur du composant height n'est pas compacte

~~~~~

Ce dernier point est ciblé sur cette discussion, où Apple confirme que tant que "hauteur compacte" n'est pas utilisé , il devrait maintenir la rétrocompatibilité.

J'espère que cela aide quelqu'un!


Lors du déploiement de votre application sur iOS 7, Xcode compilera votre storyboard de deux manières différentes:

  • Pour l'iPhone, votre storyboard est compilé en "Compact-Regular" (largeur compacte, hauteur régulière), et ceci est empaqueté comme votre plume "~ iphone".

  • Pour iPad, votre storyboard est compilé en tant que "Regular-Regular" et est empaqueté en tant que votre "~ ipad".

Donc, si vous cherchez à déployer à la fois iOS 7 et iOS 8, vous devez concentrer votre conception sur les classes de taille Compact-Any et Regular-Any. Cela vous offrira la meilleure expérience possible en termes de correspondance entre l'interface utilisateur et les cibles de déploiement. Bien sûr, vous êtes invités à modifier la mise en page pour les autres classes de taille, mais à moins que ces modifications ne soient appliquées aux classes de taille Compact-Regular ou Regular-Regular, vous ne verrez pas ces modifications sur iOS 7.


Malheureusement, les réponses de Dave et Joey ne fonctionnent pas pour moi. Je ne suis pas autorisé à commenter dans ce fil, alors s'il vous plaît pardonnez-moi si c'est le mauvais endroit.

J'ai créé une question spécifique pour cela: Exemple d'interface utilisateur adaptative paysage portrait iPhone qui est rétrocompatible avec iOS 7

D'après ce que j'ai appris jusqu'à présent, je crois que, comme dans mon exemple, il n'est pas possible d'avoir 2 contraintes séparées et différentes pour un élément de l'ui en mode portrait et paysage avec l'iPhone iOS7 basé sur les classes de taille. Serait heureux si je me trompe, cependant.


Tout en traitant du même problème, j'ai trouvé une autre réponse que je n'ai pas encore vue. On dirait que les classes de taille dans les fichiers XIB ne fonctionnent pas du tout. Si je crée un prototype de cellule dans le fichier de storyboard , cela fonctionne dans iOS7 comme expliqué dans d'autres réponses, cependant quand la même cellule prototype est déplacée dans un fichier XIB séparé - les classes de taille sont ignorées dans iOS7.

Voici un lien vers l'exemple de projet démontrant ce comportement: https://dl.dropboxusercontent.com/u/6402890/testSizeClasses.zip

Dans la cellule prototype, j'ai quatre contraintes de chaque côté de la vue grise. Chacun est configuré de la même manière: Tout / Tout - 10, Régulier / Régulier - 20

Il fonctionne très bien dans iOS8 simulateur à la fois pour XIB et Storyboard, et dans iOS7 seulement les cellules définies dans Storyboard obtient des contraintes mises à jour sur iPad:


Remarque: Cette réponse était pertinente pour une version bêta de Xcode 6 et ne s'applique plus à la version d'expédition. Voir les réponses de Joey et Dave DeLong sur cette page pour plus d'informations.

(réponse originale retenue ci-dessous):

Alors que les Storyboards/XIBs configurés pour utiliser des classes de taille s'exécuteront sur iOS 7 , le système d'exploitation ne respecte pas actuellement ces size classes et semble utiliser la classe de taille 'Any / Any' par défaut.

Je suis d'accord sur le fait que la diapositive dont vous parlez semble promettre une telle compatibilité, mais cela ne semble pas être le cas actuellement (Xcode 6 beta 2) .

Pour tester, j'ai créé un projet (iOS 8 SDK, deployment target of 7.1) avec un seul bouton centré vertically and horizontally dans la classe Any / Any, mais aligné sur le coin supérieur gauche de la classe Compact / Compact ( par exemple iPhone dans le paysage). L'assistant de prévisualisation de Xcode montre que le bouton change sa position dans iOS 8 , mais pas iOS 7 . J'ai également confirmé ce comportement sur un appareil iOS 7 .