2016-04-10 1 views
0

J'ai 3 étiquettes avec des points de puce placés horizontalement. Je veux donner des points de conception personnalisée de points donc je pensais que je devrais les utiliser comme UIImage. Permettez-moi de l'illustrer:AutoResize La largeur de ContainerView en fonction de la dynamique UILabel

o PHP o Swift o Java 

Il y aura une distance fixe entre chaque étiquette et son point assigné. Les étiquettes auront également une distance fixe avec la puce de la prochaine étiquette (p. Ex. PHP - puce de Swift). En fin de compte, je veux le centrer horizontalement à la vue.

Le scénario ci-dessus fonctionnerait si j'avais des textes statiques pour l'étiquette. Cependant, je veux utiliser des textes dynamiques.


La solution que je pensais créer 3 vues de conteneur. Donc, je l'aurais:

View 

    ContainerView1 ContainerView2 ContainerView3 
    |------------| |--------------| |--------------| 
    | o PHP | | o Swift | | o C  | 
    |------------| |--------------| |--------------| 

Mais cela ne semble pas cohérent pour les tailles de texte dynamiques/changeantes. J'utiliser sizeToFit pour ajuster le texte, mais les vues conteneur ont créé un ViewController distinct, donc je ne suis pas sûr de pouvoir ajuster la largeur des vues du conteneur à 'Bullet Point + dynamique' '.

Parent ContainerView (or UIView?) 
|-----------------------------| 
|  CV1  CV2  CV3 | 
| |-----| |-------| |---| | 
| |o PHP| |o Swift| |o C| | 
| |-----| |-------| |---| | 
|-----------------------------| 

Ce scénario ne fonctionnera que si je peux manipuler automatiquement la largeur de « vue du conteneur » en ce qui concerne la largeur du point Bullet Label. Ainsi, je peux faire une marge fixe pour chaque conteneur et les centrer horizontalement (peut-être en utilisant un conteneur parent).

Quel est le moyen d'y parvenir? Y a-t-il un moyen de le faire sur Storyboard ou par programmation?

Répondre

1

La vue parent conteneur ajustera automatiquement la largeur pour s'adapter au contenu si toutes vos vues CV ont une largeur qui peut être déterminée par autolayout (vous avez dit que vous utiliserez sizetofit pour cela). Ensuite, ils doivent avoir un espace vertical fixe entre le et le premier et le dernier doit également avoir des marges au conteneur parent (avant et arrière). Le conteneur parent ne doit pas avoir de largeur contrainte (contrainte de largeur fixe par exemple) car il doit être redimensionné en fonction du contenu à l'intérieur et s'il en résulte un conflit de contraintes et cela ne fonctionnera pas. Si vous n'utilisez pas autolayout pour le conteneur de vue parent ou si vous avez une contrainte largeur que vous pourriez obtenir la taille du conteneur en utilisant

let size = parentViewContainer. systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 

et le mettre soit le cadre ou la contrainte largeur.

Here est un exemple de projet le démontrant.

+0

Je n'ai pas vraiment compris comment le CV1 va comprendre le changement de taille de UILabel et mettre à jour sa propre largeur à la nouvelle largeur (largeur balle + étiquette). À ce stade, je comprends que les CV1 - CV2 et CV2 - CV3 auront des marges fixes. Mais maintenant, comment le ParentCV ajustera-t-il sa largeur en fonction des CVs et les CV ne seront pas ajustés (si j'utilise leading & trailing de CVs à ParentCV). Après ce centrage parentContainer à SuperView horizontalement est assez simple. Pouvez-vous s'il vous plaît me donner plus de détails? – senty

+0

Dans '' CV's vous devez appliquer la même méthode que dans le parent parce que vous voulez essentiellement la même chose. Vous devez donc définir la marge d'interlignage pour l'image de la puce, l'espacement vertical entre l'image de la puce et l'étiquette et la marge de fin de l'étiquette.Et cela devrait être, autolayout va définir la largeur du 'CV' en fonction du contenu à l'intérieur. – Jelly

+0

Pouvez-vous s'il vous plaît créer un exemple de projet si ce n'est pas trop demander? Je suis vraiment confus et très excité d'apprendre cela. Quoi que j'essaie, quelque chose ne fonctionne pas: S – senty