137 votes

Comment Xcode 6 ISU adaptative peut-elle être rétro-compatible avec iOS 7 et 6 d’iOS ?

Je viens de regarder la WWDC vidéo n ° 216, "la Construction Adaptative de l'INTERFACE utilisateur avec UIKit."

A environ 45:10 Tony Ricciardi pourparlers sur les changements de l'IB dans Xcode 6 à soutenir les nouveaux changements.

Il dit: "Vous pouvez déployer ces documents à l'envers pour les anciennes versions d'iOS".

(où "Ces documents" signifie probablement XIBs et des story-boards des paramètres spécifiques pour les différentes classes de taille.)

Je ne l'invente pas. Allez regarder la WWDC vidéo.

Comment est-ce possible? Trait de collections et de la taille des classes ne sont définies que sur iOS 8. Comment peut-runtime comportement qui dépend de l'INTERFACE utilisateur des constructions qui sont nouveaux pour iOS 8 travail dans les précédentes versions iOS?

Si c' est possible ce serait merveilleux. Vous pouvez construire des applications qui tournent sur iOS 6, 7, et 8, et de prendre avantage de la nouvelle disposition de l'INTERFACE utilisateur flexible capacités que Apple a ajouté à Xcode 6. J'ai créé adaptative logique de l'INTERFACE utilisateur de moi-même dans le code, et c'est tout à fait un peu de travail.

151voto

Joey Points 2141

Les modifications apportées à l'INTERFACE utilisateur avec la Taille des Classes dans Interface Builder NE s'affiche pas correctement sur iOS 7 appareils et l'Aperçu dans Xcode. Par exemple, j'ai changé quelques Auto contraintes de Mise en forme et de taille de police Régulière de la hauteur de la largeur et de ceux qui a changé les contraintes sont visibles dans le Simulateur d'iPad fonctionnant sous iOS 7.0.

Toutes les classes de taille des optimisations sont disponibles pour iOS 7, à l'exception de la taille des classes qui ont un appareil Compact Hauteur. Ceci a été confirmé par Apple et est maintenant directement dans la documentation:

Pour les applications prise en charge des versions de l'iOS antérieures à iOS 8, la plupart des classes de taille sont rétro-compatibles.

Les classes de taille sont rétro-compatibles lorsque:
- L'application est construite à l'aide de Xcode version 6 ou version ultérieure
- La cible de déploiement de l'application est plus tôt que d'iOS 8
- Les classes de taille sont spécifiées dans un storyboard ou xib
- La valeur de la hauteur du composant n'est pas compact

Parce que iOS 7 n'est pas un couple de classes de taille, si vous les utilisez, vous allez rencontrer des problèmes. Par exemple: Lorsque vous avez Compact w Tout h définies et Compact w Compact h définie, sur iOS 7 de respecter le Compact w Tout h mais sur iOS 8 il rend le Compact w Compact h apparition.

Donc, si vous souhaitez utiliser ces deux classes de taille et de maintenir la compatibilité avec iOS 7, je le ferais tout les optimisations que vous désirez pour l'iPhone en mode paysage dans Toutes les w Tout h ou Compact w Tout h, puis effectuer vos autres optimisations pour les différentes classes de taille en tant que de besoin, et de cette façon vous n'aurez pas besoin d'utiliser une classe de taille compacte de la hauteur et éviter de courir dans des problèmes.

68voto

Dave DeLong Points 156978

Lors du déploiement de votre application pour iOS 7, Xcode, de compiler votre storyboard de deux façons différentes:

  • Pour iPhone, votre scénario sera compilé en tant que "Compact-Ordinaire" (Compact largeur, la hauteur normale), et cela est emballé comme votre "~iphone" plume.

  • Pour l'iPad, votre scénario sera compilé comme "Régulier Régulier" et obtient emballé comme votre "~ipad" plume.

Donc, si vous cherchez à déployer à la fois sur iOS 7 et iOS 8, vous devez vous concentrer votre conception sur le Compact-Tout et Régulier de Toutes les classes de taille. Qui va vous donner la meilleure expérience en termes de correspondance de l'INTERFACE utilisateur à travers le déploiement des objectifs. Vous êtes, bien sûr, bienvenue à modifier la mise en page pour les autres classes de taille, mais à moins que ces modifications appliquées à l'Compact-Régulier ou Régulier Régulier de la taille des classes, alors vous ne voyez pas ces modifications sur iOS 7.

27voto

royfactorial Points 332

Alors qu' Storyboards/XIBs configuré pour utiliser les classes de taille sera exécuté sur iOS 7, le système d'exploitation ne dispose pas actuellement de respecter ces size classes et s'affiche à utiliser la valeur par défaut " Tout/Tout de la taille de la classe.

Je suis d'accord que la diapositive que vous mentionnez semble promettre une telle compatibilité, mais il 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 qui est centrée vertically and horizontally dans la Toute/Toute classe de taille, mais aligné en haut à gauche dans le Compact/Compact classe de taille (par ex. l'iPhone en mode paysage). Xcode Aperçu de l'Assistant montre que le bouton change sa position en iOS 8, mais pas iOS 7. J'ai confirmé l'existence de ce comportement sur un iOS 7 appareil.

12voto

radiovisual Points 506

Comme certaines des réponses et des commentaires ont discuté de la nature de rétro-compatibilité, j'ai pensé que je voudrais partager un extrait directement à partir de la Documentation d'Apple:

~~~~~

Le déploiement d'une Application Avec la Taille des Classes sur les anciennes Versions iOS

Pour les applications prise en charge des versions de l'iOS antérieures à iOS 8, la plupart des classes de taille sont rétro-compatibles.

Les classes de taille sont rétro-compatibles lorsque:

  • L'application est construite à l'aide de Xcode version 6 ou version ultérieure
  • La cible de déploiement de l'application est plus tôt que d'iOS 8
  • Les classes de taille sont spécifiées dans un storyboard ou xib
  • La valeur de la hauteur du composant n'est pas compact

~~~~~

Espérons que cela aide quelqu'un! Ce dernier point est destiné à cette discussion, où Apple confirme que tant que "compact hauteur" n'est pas utilisée, elle doit maintenir la compatibilité ascendante.

3voto

sha Points 11383

Tout en traitant de la même question, j'ai trouvé une autre réponse que je n'ai pas vu ici encore. Ressemble Classes de Taille en XIB fichiers ne fonctionnent pas du tout. Si je créer des cellules prototype dans l' storyboard le fichier qu'il travaille dans iOS7 comme expliqué dans d'autres réponses, mais quand le même prototype de cellule est déplacée en séparer XIB le fichier de la taille des classes sont ignorés dans iOS7.

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

Dans le prototype de la cellule, j'ai quatre contraintes de chaque bord de gris de la vue. Chaque est configuré de la même manière: Tout/Tous - 10, Régulier/Regular - 20

enter image description here

Il fonctionne très bien dans iOS8 simulateur pour les deux XIB et Storyboard, et dans iOS7 seules les cellules définies dans le Storyboard est mis à jour de contraintes sur l'iPad:

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X