111 votes

Interface Builder : Quels sont le UIView ' s de Layout iOS 6/7 Deltas pour ?

Je viens de m’apercevoir la propriété de Delta iOS 6/7 trouvée sous disposition de structures de la UIView.

Ce qui est ceci pour et pourquoi est-ce manque de mise en forme automatique ?

enter image description here

108voto

WDUK Points 11893

Note: j'ai remarqué à cette question, il y a un moment, mais je suis le seul à poster ma réponse maintenant, parce que le NDA a été levé

Pourquoi ne fait-il pas apparaître pour la mise en page automatique?

Comme vous l'avez remarqué, iOS 7 apporte un tout nouveau look. Le look de l'INTERFACE utilisateur, les éléments ont changé, mais aussi de certains de leurs tailles (ou métriques en général). Cela peut rendre la conception d'interface pour accueillir à la fois iOS 7 et ses prédécesseurs un peu de douleur.

Apple officiel de la ligne est d'utiliser la mise en forme automatique afin de résoudre ce; cela doit prendre beaucoup de les tracas de la disposition des éléments de l'INTERFACE utilisateur pour vous. Parfois intégrant ce n'est pas facile à faire, surtout si vous devez encore le support de l'iOS 5 pour des raisons d'affaires, ou vos interfaces sont gérés d'une manière qui rend la mise en œuvre de mise en page automatique difficile. En tant que tel, Apple semble avoir fourni un moyen de rendre votre travail un peu plus facile si vous tombez dans cette catégorie de niche, et ils ont appelé ce iOS 6/7 Deltas.

Ok, alors, que fait-il?

Tandis que l'étiquette dans Interface Builder est un peu confus quant à ce "Delta" signifie dans ce contexte, le code contenu dans le .xib fichier qui correspond à cette fonction est un peu plus clair:

<inset key="insetFor6xAndEarlier" minX="-50" minY="-100" maxX="-50" maxY="300"/>

Le nom de la clé insetFor6xAndEarlier stipule explicitement ce qu'il fait; vous pouvez fournir d'autres encarts pour les éléments de l'INTERFACE utilisateur lorsque vous l'exécutez sur iOS 7 prédécesseurs. Par exemple, le code ci-dessus définit le delta suivantes changement:

x: 50
y: 100
width: -100
height: 200

Tandis que les valeurs stockées dans le .xib ne correspond pas à la cité des valeurs directement, il y a une corrélation entre eux.

x: -minX
y: -minY
width: minX + maxX
height: minY + maxY

Les images ci-dessous montre ce changement visuellement. Il est tout à fait un exemple extrême, mais c'est pour démontrer sa capacité. Je voudrais seulement que, dans la pratique, pour avoir les changements de delta de quelques pixels.

iOS7 View

iOS6 View

Vous pouvez remarquer que les valeurs sont l'inverse de l'iOS 6 vue; c'est parce que les deltas sont relatives au type de vue que vous travaillez avec. Si vous êtes d'édition pour iOS 6, les deltas il y a dans le but de transformer l'élément correctement pour iOS 7 (à l'inverse de l'exemple ci-dessus).

Afin de voir les différents styles, vous pouvez changer le mode d'Interface Builder présente basé sur le système d'exploitation, il serait exécuté. C'est contenue dans le Fichier Inspecteur->Interface Builder Document (1er onglet sur la barre de droite), comme suit:

Interface Style Switch

Est-ce à exister que si j'aime le code de mon interface à la main?

Pas directement, mais vous pouvez facilement obtenir le même effet par conditionnelle des contrôles sur la version de l'OS à l'intérieur de votre code, et le réglage de la position correcte/taille en conséquence. Le delta possibilité existe dans Interface Builder, car il n'y aurait pas de façon simple d'avoir conditionnelle de positionnement sans avoir le code pour le faire, et le point d'Interface Builder est d'obtenir une quantité de code de la route que possible pour l'INTERFACE utilisateur.

Ensemble...

Apple vous recommandons d'utiliser la mise en forme automatique, il rend votre vie plus facile dans la plupart des cas. Si vous ne pouvez pas l'utiliser (pour les raisons mentionnées ci-dessus), les deltas de vous fournir la possibilité de positionner vos éléments d'INTERFACE utilisateur de manière appropriée, en fonction de l'OS de la métrique, sans la nécessité de repositionner manuellement dans le code. Un bon exemple est à régler pour le manque de la barre d'état, mais il ya beaucoup d'autres cas d'utilisation.

Naturellement, si vous êtes seulement en développement pour iOS7 et au-dessus, vous n'avez pas besoin de cette fonctionnalité/ne pas le découvrir. Si vous avez besoin d'avoir iOS6 les appareils exécutant votre application lors de la construction avec l'iOS7 SDK, sans mise en forme automatique, vous avez besoin de deltas.

Au moment de la rédaction (21 août), je ne trouve pas de documentation concernant cette fonctionnalité, ni de mentions dans la WWDC matériel. J'ai eu un jouer, et après un peu de recherche, c'est ce que j'ai découvert.

83voto

digarok Points 923

Cela fait en réalité référence à la différence entre la position de mise en page à partir de iOS6 pour iOS7.

Dans iOS7, certains points de vue peuvent masquer la barre de statut ou ont transparente, et, en effet, il est recouvert sur le dessus de votre point de vue. Donc, si vous placez un élément de l'INTERFACE utilisateur (0.0, 0.0) sur iOS6, il apparaîtra en dessous de la barre d'état, mais sur iOS7 il semblerait partiellement couvertes en dessous de la barre d'état. Donc, dans ce cas, vous voulez un delta qui correspond à la hauteur de la barre d'état (20.0 points) de sorte que la mise en page est identique à l'iOS6 et iOS7.

Je crois que ce n'est pas nécessaire si vous utilisez la mise en forme automatique, mais bien sûr, alors vous perdez iPad1 l'appui, que beaucoup d'entre nous ne sont pas disposés à concéder à ce point dans le temps.

30voto

Saran Points 2996

Je sais que c'est déjà une réponse, tout en ajoutant une petite variante en espérant qu'il pourrait également aider ceux qui n'utilisent pas mise en page automatique et que vous voulez encore de support d'iOS 6.1 et les versions antérieures.

Lire cet Apple Transition Guide - Soutenir la version antérieure

Choisissez "Afficher en tant que' à 'iOS 7.0 et plus Tard"

enter image description here

De Base de l'INTERFACE utilisateur pour iOS 7. Pour iOS 6 donner adapté valeur delta. Utiliser l'aperçu pour voir comment cela va se rendre dans iOS 7 et iOS 6 appareil.

enter image description here

Étapes rapides:

Sélectionnez chacun des enfants immédiats de vue de la racine individuellement et ajouter 20px à sa valeur 'Y'.

enter image description here

Ensuite, sélectionnez tous les enfants immédiats collectivement et donner delta Y as-20px. Vous pouvez aussi faire cela dans le lot ou individuellement.

enter image description here

9voto

sunkehappy Points 4423

Mise en forme automatique nécessite au minimum iOS 6.0. Si vous souhaitez prendre en charge d’iOS 5.0, vous ne pouviez pas utiliser la mise en forme automatique.

Et ces deltas sont utilisés pour vous aider à ajuster la position d’affichage sur la version iOS différents (principalement iOS 7 et version de l’iOS inférieur à 7).

J’utilise ces valeur pour m’aider comme cette image.enter image description here

3voto

onmyway133 Points 2196

Pour voir iOS 6/7 Delta dans l'action, je vais démo avec un SegmentedControl qui s'affiche correctement sur iOS 6 et iOS 7 appareils.

Tout d'abord, sélectionnez votre .Xib ou ViewController dans le Storyboard. Décochez la case Utiliser la mise en page automatique et sélectionnez "Afficher en tant que iOS 7 et plus tard"

enter image description here

Dans l'Interface du Générateur de toile, endroit de votre SegmentedControl de sorte que son origine.y est de 20. Dans iOS 6/7 Delta, choisissez -20 pour DeltaY

enter image description here

Cela rendra votre la SegmentedControl posé en dessous de la Barre d'État dans les deux iOS 6 et iOS 7 appareils

enter image description hereenter image description here

Une autre utilité des citations de Guide du Développeur de l'iOS 7 Barre d'État

Les Deltas peuvent être réglés individuellement pour chaque point de vue et de travailler comme vous le feriez s'attendre. Si votre scénario ou de la graine est définie comme iOS 6, alors réglage de la deltas sera la cause de ce point de vue pour être déplacé et/ou redimensionnée par le jeu de delta montant lorsque vous exécutez dans iOS 7. Alternativement, si votre storyboard ou de la graine est réglé pour afficher dans iOS 7, puis les deltas seront appliquée lors de l'exécution dans iOS 6

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