J'essaie d'utiliser Autolayout dans UitailViewCell avec plusieurs étiquettes avec un calcul en pourcentage. Je veux un espace égal entre les étiquettes mais des largeurs différentes. De plus, la largeur et l'espace diffèrent en mode portrait et paysage comme affichés dans les images suivantes. P>
p>
p>
Je veux que l'espace soit 4 en portrait et 8 dans le paysage. p>
en portrait Label1 Largeur - 50% Label2 Largeur - 20% Label3 Largeur - 30% P>
dans le paysage Label1 Largeur - 50% Label2 Largeur - 15% Label3 largeur - 20% Label4 largeur - 15% p>
J'ai utilisé l'espacement horizontal et les contraintes supérieures et inférieures, mais cela ne résulte pas d'une largeur et d'un alignement de l'espace appropriés. La première ligne est également en tête d'en-tête, il ne faut pas avoir indicateur de divulgation et les lignes restantes devraient l'avoir. Toute aide serait appréciée. p>
Remarque: sa application universelle et IM à l'aide de SplitView dans iPad. En portrait, il devrait afficher 3 étiquettes comme sur iPhone et dans le paysage, il devrait afficher 4 étiquettes comme mentionnées ci-dessus. De plus, mon contrôleur d'affichage du maître est toujours visible. P>
5 Réponses :
Nous arrivons tout d'abord au problème que vous voulez de l'espace 4 en portrait et 8 dans le paysage. P>
Si vous connaissez bien les classes de taille, utilisez-les, à partir du bas de la carte de l'histoire, sélectionnez la classe de taille souhaitée (la classe de taille utilisée en mode portrait), vous pouvez utiliser la classe de format "Hauteur régulière de la largeur compacte" pour définir les contraintes pour tous les iPhones en mode portrait. P>
Maintenant, vous définissez la contrainte d'espacement horizontale entre les boutons, après avoir placé la contrainte d'espacement horizontal, vous pouvez le désactiver à partir des classes de taille dans lesquelles vous ne souhaitez pas cette contrainte, c'est-à-dire ces classes de taille utilisées en mode paysage. P >
Pour désactiver la contrainte spécifique pour n'importe quelle classe de taille, sélectionnez simplement cette contrainte, puis dans l'inspecteur d'attributs, vous verrez une case à cocher nommée «installée», ce qui signifie que cette contrainte est activée pour cette classe de taille. Par défaut, le "installé" est destiné à "toute" classe de taille "qui signifie que cette contrainte est appliquée à toutes les classes de taille, il suffit de décocher cette case à cocher. P>
sur le côté gauche de cette case "installée", une icône "+" qui vous aide à activer ou à désactiver la contrainte pour une classe de taille spécifique, sélectionnez donc la classe de taille souhaitée dans cette icône et cochez la case de cette classe de taille. .Voir l'image1
p>
Ajoutez maintenant une autre contrainte d'espacement horizontale pour le paysage et, désactivez-la de la classe de taille "toute autre" et activé-la pour n'importe quelle largeur, une hauteur compacte qui représente l'iPhone dans le paysage, vous avez maintenant ajouté deux mêmes contraintes avec différentes constantes qui fonctionnent différentes situations (une est portrait et autre dans le paysage). p>
Venez maintenant vers votre problème réel que vous souhaitez que la taille de vos étiquettes soit proportionnelle. Tout comme des contraintes, vous pouvez activer ou désactiver des vues pour différentes classes de taille, faites-la glisser quatre étiquettes sur la carte de l'histoire et désactivez la classe de taille de la quatrième pour «Hauteur régulière de la largeur compacte». p>
Pour activer ou désactiver la vue en classe spécifique, sélectionnez l'étiquette, puis utilisez la même case "installée" dans l'inspecteur attributé et désactiver la quatrième étiquette de la taille de taille "de hauteur régulière de la largeur compacte". P>
Maintenant, la seule chose qui reste est que vous souhaitez définir la largeur différente du paysage et du portrait. Pour cela, nous devons définir la contrainte de largeur de deux largeur pour chaque étiquette (une seule quatrième étiquette a une limite de largeur) une pour portrait et autre pour le paysage. P>
Maintenant, définissez la contrainte de largeur pour chaque étiquette de portrait comme vous le souhaitez et activez ces contraintes uniquement pour la catégorie de taille "de la hauteur régulière de la largeur compacte". De sorte qu'ils ne travaillent que dans le portrait. P>
maintenant à partir du bas de la carte Story change la classe de taille en "hauteur compacte régulière de la largeur" et placez à nouveau les contraintes de largeur sur vos étiquettes cette fois-ci avec différentes constantes. Une chose que vous observerez que cette fois, vous pouvez définir la contrainte pour la quatrième étiquette car cette étiquette est uniquement visible est cette classe de taille. P>
Et c'est ça :) J'espère que cela vous aidera, dites-moi si cela fonctionne ou non. P>
J'ai mis à jour ma question. Mon problème consiste à avoir 3 étiquettes dans Portrait et 4 étiquettes dans le paysage tout en utilisant SplitView dans iPad. Je ne l'ai pas mentionné clairement.
Donc, cela ne semble pas un problème, vous utilisez simplement le contrôleur d'affichage sur la carte de l'histoire et placez une vue sur ViewController, désactivez cette vue de taille de la taille de la "hauteur compacte régulière de largeur", puis faites glisser une vision de SplitView sur ce mode de vue et désactivez-la pour "largeur compacte" Hauteur régulière "classe de taille. Et puis vous avez deux vues séparées que l'une pour le portrait (UIView) et d'autres sont pour le paysage (UisplitView). Placez 3 étiquettes sur UIView et 4 étiquettes sur SplitView et activez les étiquettes pour leur classe de taille respective. Maintenant, vous pouvez utiliser ma réponse ci-dessus pour un guide supplémentaire.
Code ci-joint est une solution de votre problème dans iPhone. Il fonctionne exact comme votre problème de mention dans iPhone en mode portrait et paysage. Vous pouvez mettre à jour cette logique pour votre scission-vue dans iPad. Si vous avez trouvé un problème, veuillez commenter ici. P>
Ce problème est résolu avec une classe de taille dans iOS 8 selon la logique suivante. strong> p>
Selon votre problème, vous avez mentionné ci-dessus, vous souhaitez ajouter des étiquettes conformément à la largeur de la cellule. Donc, pour que vous puissiez req. Largeur de référence parce que vous pouvez utiliser contenuview comme réf. Nous devons donc prendre une vue supplémentaire pour cette maintenant vous req. 50% de largeur pour la 1ère étiquette afin d'utiliser une logique multiplicateur que nous l'atteindrons.
Par exemple, si vous voulez une première étiquette de 100px, définissez "Réf. Vue" de la largeur 200.
Même chose que je gère pour une autre étiquette à 20% et 30% de la largeur du rapport de la largeur à réf. vue. p>
en mode portrait, vous req. Seulement 3 étiquettes, donc en utilisant la classe de taille Attribuer la largeur de la 4ème étiquette à 0. p>
Tout cela fait au-dessous du code p>
Vérifiez mon code avec la classe de taille p>
Quelqu'un peut-il expliquer ce qui est un problème avec cela ??
Comme les classes de taille ne font pas la distinction entre iPad en portrait vs iPad dans le paysage, vous ne pouvez pas utiliser de classes de taille. Ce que vous pouvez faire est dans votre XIB, vous définissez toutes les contraintes requises comme suit P>
Définissez la contrainte pour l'espace entre les étiquettes et créez l'iboutlet pour celui-ci dans votre classe d'affichage, vous le prétendez "GapConstraint". P> LI>
Définissez la contrainte pour la largeur de chaque étiquette qui sera proportionnellement à la largeur de SUPERVIEW. Pour une plus grande contrainte d'étiquette serait BiggerLabel.Width = superview.width * 0.5. p> li>
pour les étiquettes où vous souhaitez une largeur différente dans l'orientation de portrait et de paysage, définissez deux contraintes de largeur (une pour chaque orientation) et définissez la priorité d'une contrainte à 750 (disons hauts pour le portrait) et d'autres 500 (bas - disons pour le paysage). Créez les points de vente pour toutes ces contraintes. Nous devons définir deux contraintes de largeur (une pour portrait et une pour le paysage) pour chaque étiquette, car la propriété multiplicateur de NslayoutConstraint est réadonnée, une fois que le multiplicateur est attribué, nous ne pouvons pas modifier sa valeur. Pour résoudre ce problème, nous définissons deux contraintes et dans le code en fonction de l'orientation, nous activerons la contrainte plus appropriée en modifiant les priorités. P> LI> ol>
Méthode UpdateConstraints UpdateConstraints et dans cette méthode, vous pouvez vérifier l'orientation du périphérique en cours. Si l'orientation du périphérique est une valeur de portrait, la valeur constante de GapConstraint (créée dans Point1) à 4, alors que dans le paysage, changez la valeur constante de GapConstraint (créée à Point1) à 8. Pour la largeur des étiquettes; Dans l'orientation portrait, changez la priorité de la contrainte de largeur de portrait à 750 et abaissez la priorité de la contrainte de largeur de paysage à 500, tandis que dans l'orientation du paysage, changez la priorité de la contrainte de largeur de portrait à 500 tout en augmentant la priorité de la contrainte de largeur de paysage à 750. p>
Pour avoir un espacement égal dans UitailViewCell, vous pouvez ajouter des vues B / W Labels, puis définir Constarint à la largeur et à la hauteur de toutes les étiquettes pour être la même. P>
p>
La question était de savoir comment configurer des étiquettes de largeur différente.
@ Reinhardmänner Vous pouvez essayer avec une largeur différente. C'était juste à des fins d'illustration.
Vous pouvez obtenir la mise en page souhaitée par des manières suivantes p>
Méthode 1: Utilisation de VLL forte> P>
Méthode 2: Utilisation de différents Uitaires personnalisés forts> p>
Vous pouvez utiliser différents uitaires personnalisés pour chaque orientation. p>
Vous devez utiliser des classes de taille code> pour y parvenir. Voici un très bon Tutoriel de Ray Wenderich
Définissez-vous des contraintes d'espacement et de largeur lorsque l'orientation change comme ce que vous voulez?
@Bhanupriya je ne fais rien de manière programmatique. Je sais que je peux y parvenir via le codage. Mais je cherche une solution à faire dans Storyboard.
Ensuite, @ericqian a raison. Vous devriez aller pour des cours de taille
@Ericqian cet échantillon donne des connaissances de base, mais cela ne m'aide pas car ma condition est un peu plus compliquée. Merci de votre aide.
@Sasim aimeriez-vous gérer l'espace entre les labels?
@Sasim j'ai une solution mais vous devez définir deux valeur multiplicateur constante par paysage et portrait avec code
@Gauravpatel Pouvez-vous l'expliquer en détail?
Dire - Label1 Largeur - 50% Label2 Largeur - 20% Label3 Largeur - 30%. Vous avez couvert un espace entier (50 + 30 + 20 = 100). Ce qui reste pour l'espacement.
La largeur sera (largeur - 4 * espace). Comprendre simple @Vats
@Sasim c'est possible uniquement avec la classe de taille
Dans Storyboard, vous ne pouvez pas faire de pourcentage de largeur de
uiview code> en fonction de son superview de quelque manière que ce soit, même avec des classes de taille. Les classes de taille doivent vous aider à différencier la mise en page entre des écrans plus gros et plus petits, pour ne pas faire de la largeur de pourcentage.