Dans mise en page automatique, comment puis-je avoir vue prendre la moitié de l'écran, indépendamment de l'orientation?
En mode portrait, j'ai un tableview sur le côté gauche, et une webview sur le côté droit. Ils ont tous deux prendre la moitié de l'écran. Je l'ai mise en page automatique activée.
Mais quand j'ai faites pivoter l'écran en mode paysage, la tableview la largeur d'prend moins de la moitié de la taille de l'écran, et la webview finit par prendre plus, au lieu que ce soit une répartition égale.
Pourquoi cela se produit? Comment puis-je avoir le point de vue, ne représentent que la moitié de l'écran en ce qui concerne leurs largeurs, indépendamment de l'orientation de l'écran?
Vous devez vous connecter pour publier un commentaire.
La première moitié de la réponse de l'adresse de cas où l'on veut scinder la vue uniformément entre voir Une (bleu) et vue B (rouge). La deuxième moitié du cas dans lequel nous voulons avoir la vue d'Un prendre jusqu'à la moitié de l'écran, mais la vue de B n'existe pas.
Étape 1:
Configurer bleu de l'auto-contrainte de mise en page comme sur la photo. En haut, à gauche, en bas de 0 à la superview. Droit de 0 pour le rouge vue.
Étape 2:
Les mêmes, mais en miroir, les contraintes pour le rouge en vue.
Si vous avez effectué les deux premières étapes correctement, vous devriez avoir une mise en page automatique des erreurs et des avertissements:
Nous avons besoin d'un plus contrainte de corriger ces erreurs/avertissements et obtenir ce dont nous avons besoin.
Étape 3:
Gardez la touche ctrl enfoncée, cliquez et faites glisser à partir d'une vue à l'autre et sélectionnez "égalité des largeurs". Maintenant, nos points de vue conservera toujours la même largeur. L'ensemble de nos mise en page automatique des avertissements et des erreurs disparaissent, et nos points de vue sera toujours la moitié de l'écran, peu importe l'orientation ou de l'appareil.
Pour ajouter ces contraintes dans le code en utilisant le VFL, nous avons besoin de les contraintes suivantes:
Maintenant, supposons le cas où nous voulons une vue unique de prendre la moitié de l'écran, mais nous n'avons pas une vue de l'autre moitié. Nous pouvons toujours faire cela avec mise en page automatique, mais c'est un peu différent mis en place. Dans cet exemple, notre point de vue est bleu, et sa vue parent est vert.
Étape 1:
Ceci est similaire à l'étape 1 ci-dessus, sauf que nous n'ajoutons pas un droit de contrainte du côté de l' (cela va évidemment varier si nous voulons que notre point de vue pour prendre une autre moitié).
Étape 2:
Comme avant, nous voulons attribuer une "égalité des largeurs de" contrainte. Dans ce cas, de notre point de vue à la vue parent. Encore une fois, gardez la touche ctrl enfoncée et cliquer glisser de l'un à l'autre.
À ce stade, nous avons une disposition automatique d'avertissement. Mise en page automatique veut notre cadre pour correspondre à l'un de ses parents largeur. En cliquant sur l'avertissement et choisir "mettre à Jour les contraintes" va mettre une valeur codée en dur dans. Nous ne voulons pas de cette.
Étape 3:
Sélectionnez la vue et aller à sa taille inspecteur. Ici, nous allons être en mesure de modifier les contraintes.
Cliquez sur "Modifier" à côté de la "Largeur Égale à:" la contrainte. Nous avons besoin de changer la valeur du multiplicateur.
Nous avons besoin de changer la valeur du multiplicateur de 2.
La contrainte devient une "Largeur Proportionnelle à:", et l'ensemble de notre mise en page automatique des avertissements et des erreurs disparaissent. Maintenant notre point de vue, toujours exactement la moitié de la super vue.
Pour ajouter ces contraintes dans le code, on peut ajouter un peu de l'aide de VFL:
Mais proportionnelle à la largeur de la contrainte ne peut pas être ajouté avec le VFL. Nous devons l'ajouter en tant que tel:
@"[leftView(==rightView)]"
. Mais vous voulez également les autres contraintes. Si vous voulez:@"|[leftView(==rightView)][rightView]|"
(et vous auriez encore besoin de la contrainte verticale)H:
en face de cette chaîne. Si vous souhaitez créer ces contraintes:@"H:|[leftView(==rightView)][rightView]|"
à l'horizontale et de la verticale que vous souhaitez créer:@"V:|[leftView]|"
et@"V:|[rightView]|"
Créer un
UIView
dansXIB
ouStoryboard
Se lier à la fois à la superview bords (vue de table à la pointe de la technologie, le web pour le bord de fuite) et le jeu de la contrainte pour eux d'avoir la même largeur.
Par programmation dans Swift 4:
La contrainte d'un système ne peut pas lire dans votre esprit. Vous devez dire ce que vous voulez. La moitié est à moitié. Si vous voulez de la moitié, disons la moitié. Pour rendre une vue moitié de la largeur de son superview, lui donner une largeur de contrainte qui a un multiplicateur de
.5
par rapport à son superview de largeur.