web-dev-qa-db-fra.com

autolayout iOS pour centrer ma vue entre deux vues

Comment configurer l'autolayout dans Interface Builder pour organiser les vues verticalement, comme indiqué sur l'image:

scheme

Top view épinglé à l'écran supérieur Edge, Bottom view épinglé à l'écran inférieur Edge. My view doit être centré entre les vues du haut et du bas (donc distance par rapport à Top view égale la distance par rapport à Bottom view

61
brigadir

Pour ce faire, vous devez avoir 2 vues "d'espacement" invisibles entre vous.

Vous ne pouvez pas créer des espaces de même hauteur. Mais vous utilisez les vues "spacer" et les placez entre vos vues (avec 0 espace par rapport aux vues environnantes).

Ensuite, vous donnez à ces vues une hauteur égale et elles pousseront vos vues pour centrer le My View avec un espace égal au Bottom View et au Top View.

c'est à dire comme ça ...

V:|[Top View][spacer1][My View][spacer2(==spacer1)][Bottom View]|

EDITER - Une autre façon

Je viens de penser à une autre façon de faire cela. Vous pourriez avoir un conteneur invisible UIView compris entre Top View et Bottom View sans espace.

Ensuite, placez My View dans cette vue invisible et centrez-la verticalement.

99
Fogmeister

Une autre solution consiste à ajouter une vue invisible entre top view et botom view et à placer my view au centre de cette vue: 

 Centered UIView

25
anatoliy_v

(5 ans plus tard) j'ai trouvé la solution la plus canonique:

UILayoutGuide est spécialement introduit pour résoudre ce type de tâches (depuis iOS 9).

Utilisez des guides de présentation pour remplacer les vues factices que vous avez éventuellement créées pour représenter des espaces inter-vues ou une encapsulation dans votre interface utilisateur} _ - Documents de référence

Cela fonctionne très bien dans le code, mais malheureusement, Interface Builder ne prend pas en charge les guides de présentation personnalisés.

5
brigadir

Cette vidéo donne un aperçu étonnant de la mise en page automatique et des contraintes du constructeur d'interface: https://www.youtube.com/watch?v=1j-Frd5snYc

0
user3474985