Centrage de multiples UILabels verticalement dans un UITableViewCell à l'aide de mise en page automatique?
Je commence à mettre en œuvre mise en page automatique, et je suis en train de reconstituer comment je peux brancher un de mes personnalisé UITableViewCell
classes correctement. Il a généralement deux UILabel
objets, l'une sur l'autre, un peu comme le standard de sous-titres de la classe. J'aimerais que ces deux étiquettes à être centré dans la cellule, indépendamment de la cellule de hauteur, avec un rembourrage entre les deux.
Je suppose que je peux le faire en faisant quelque chose comme ajouter les hauteurs des deux étiquettes, ajouter le remplissage, puis soustrayez à partir de la hauteur de la cellule, et diviser par deux. Cependant, je suis curieux sémantiquement si c'est correct, car je serais le contraindre à partir du haut et du bas de la cellule, plutôt que de l'autre. Ai-je raté un truc ici?
Deuxièmement, il y a parfois une troisième étiquette empilés là aussi, donc, trois sur le dessus de l'un à l'autre. Dans cet exemple, j'avais besoin de deux ensembles de rembourrage, etc., mais la question devient encore plus pertinent: ne devrais-je pas être contraignant les uns aux autres, plutôt que vers le haut et le bas de la cellule?
Donc, la question est plus de sémantique: si je veux contraindre plusieurs éléments à la verticale à l'intérieur d'un parent de la vue, est-il une façon plus intelligente à faire ce que la méthode que j'ai proposé ci-dessus?
(Je suis actuellement à la mise en œuvre de mise en page automatique entièrement dans le code (à l'aide de la Maçonnerie) depuis cette cellule en question n'a pas XIB et n'est pas dans un Storyboard).
OriginalL'auteur Luke | 2014-01-13
Vous devez vous connecter pour publier un commentaire.
L'approche correcte consiste à utiliser un conteneur de vue, qui tire sa hauteur de ses sous-vues. Le conteneur de vue est ensuite épinglé au centre de la cellule - vous n'auriez pas de contraintes reliant le récipient à bords supérieur et inférieur de la cellule.
À l'intérieur du conteneur, les contraintes verticales serait
|[label1]-[label2]|
, ce qui rendrait le conteneur de la hauteur de deux étiquettes en plus de l'espace, et le centre du récipient de vue entre les deux étiquettes.Si vous avez ajouté trois étiquettes, il serait
|[label1]-[label2]-[label3]|
et le centre du conteneur serait dans le centre du milieu de l'étiquette.Dans chaque cas, le centre du récipient, serait au centre de la cellule, et vous n'avez pas besoin de calculer quoi que ce soit.
OK, j'ai élargi un peu, espérons que cette aide.
Un peu. C'est un monde étrange à obtenir autour de votre tête, mais cela avait un sens après quelques lectures 🙂 merci Beaucoup!
Très intuitive façon de faire les choses sur la terrible Xcode. Merci Apple pour l'augmentation de la folie.
OriginalL'auteur jrturton
À l'aide de Interface Builder, je suis en mesure à la verticale du centre de multiples UIViews à l'aide de la procédure suivante. Mon cas est que je veux que ces multiples UIViews de se comporter comme un groupe autant que possible, mais je ne veux pas introduire d'autres points de vue afin de parvenir à cela.
Tout d'abord, je sélectionne ce que je considère être mon défaut de Facteur de Forme en utilisant le bouton en bas (Facteur de Forme étant de 3,5 pouces ou 4 pouces retina). Alors, je poste les boutons dans le centre de la vue en faisant glisser un à un, et j'ai utiliser la fonction d'auto-accrochage avec le bleu des lignes directrices pour vous aider à cela.
Une fois que les boutons sont en place, je les sélectionner un par un afin de les appliquer à leurs contraintes. Cliquez sur un bouton, puis sélectionnez le Aligner les Contraintes menu du flottement des boutons en bas à droite dans Interface Builder (je vois un ensemble de 4, et de l'Aligner sur la gauche, à côté du Facteur de Forme de bouton).
Dans ce menu, cochez la Centre Vertical Dans un Conteneur case à cocher, puis cliquez sur pour ouvrir le menu déroulant à côté de la valeur, ce qui est probablement 0. À partir de cette liste, choisissez Utilisation Actuelle de la Toile de la Valeur. Ensuite, appuyez sur la Ajouter des Contraintes bouton (éventuellement étiquetés Ajouter 1 Contrainte).
Que vous faites cela, vous savez probablement que ça fonctionne si vous voyez les valeurs en regard de Centre Vertical Dans un Conteneur devenir ensemble de l'axe des valeurs de décalage, vous pouvez le deviner sont corrects en jetant un coup d'œil à votre disposition des UIViews.
Excuses si vous ne souhaitez pas utiliser Interface Builder, mais j'avais du mal à réaliser moi-même et je voulais parler de ces étapes. Vous pouvez toujours utiliser de l'IB comme un one-off, et par programme journal les contraintes de test, puis les prendre et de les appliquer dans votre code seule solution.
Merci pour cette Cloov. A été en difficulté et totalement oublié "l'Utilisation actuelle de la taille du canevas".
Trop dur à comprendre, pouvez vous s'il vous plaît fournir un projet de code source.
OriginalL'auteur Cloov
En supposant que vous avez
label1
,label2
,label3
, etcell
Vous pouvez imbriquer tout à l'intérieur de
for()
boucle je suppose donc que vous n'aurez pas à répéter les contraintesOriginalL'auteur Shai
Pas de code. Il suffit de modifier dans la table de montage séquentiel.
OriginalL'auteur Gank