Comment puis-je calculer la bonne largeur d'UISegmentedControl segments?
Je suis en train d'utiliser un UISegmentedControl mais des problèmes de calcul de la largeur des segments. Le contrôle de tous les segments de la même largeur qui ne fonctionne pas pour certains titres, comme celui-ci:
http://morrisphotoart.com/tmp/Screenshot2011-07-13_21.17.33.png
Je peux écrire du code pour calculer le segment de la largeur si je connaissais la police et d'appeler la setWidth:forSegmentAtIndex: méthode, mais comment puis-je obtenir de la police? Ou est-il un autre moyen?
La gauche et du milieu du segment des titres ne sont pas fixes, donc je ne peux pas coder en dur les largeurs.
Vous devez le personnaliser à l'aide UILabel
Exactement. Je ne pouvais pas l'utiliser pour la même raison.
J'ai ajouté le code pour le personnaliser. Utiliser celui-la et ajoutez-la à la sous-vue à n'importe quelle vue tu veux. La méthode pickone sélecteur de fait l'opération correspondante pour chaque segment pressé. Il peut être obtenu par l'obtention du titre segment de l'indice de valeur dans la méthode. Espérons que cette aide.
J'ai supprimé certains code inutile maintenant
Exactement. Je ne pouvais pas l'utiliser pour la même raison.
J'ai ajouté le code pour le personnaliser. Utiliser celui-la et ajoutez-la à la sous-vue à n'importe quelle vue tu veux. La méthode pickone sélecteur de fait l'opération correspondante pour chaque segment pressé. Il peut être obtenu par l'obtention du titre segment de l'indice de valeur dans la méthode. Espérons que cette aide.
J'ai supprimé certains code inutile maintenant
OriginalL'auteur progrmr | 2011-07-14
Vous devez vous connecter pour publier un commentaire.
Si vous pouvez soutenir iOS 5 et versions ultérieures vous pouvez ensuite utiliser la propriété
apportionsSegmentWidthsByContent
et mis àYES
.De l'iOS 5 docs:
OriginalL'auteur Camsoft
EDIT: une option plus simple serait d'utiliser l'iOS 5 propriété
apportionsSegmentWidthsByContent
comme mentionné dans @Camsoft de réponse iciBien, j'ai fini par trouver la UIFont de piquer à travers le sous-vues (ce qui pourrait se briser dans un futur iOS). Être une modularité et la réutilisation de l'aficianado, j'ai écrit cette routine pour le faire et puis de distribuer l'espace de sorte que les segments dans le contrôle espacés de manière égale pour les titres.
Sauf qu'il ne gère pas le cas où il n'y a PAS d'espace à gauche, c'est là que votre étiquette textes sont trop large pour la largeur totale de la commande, mais d'autres que de petits défauts de fonctionnement 😉
merci beaucoup
excellent travail,,,,,
Thx progrmr! Malheureusement, cela ne fonctionne plus avec iOS 7. Corrigé et simplifiée de la fonction publié ici.
OriginalL'auteur progrmr
Vous êtes les Bienvenus ! 🙂 Amusez-vous bien !
Je n'ai pas vraiment envie d'avoir à pousser vers le bas dans le sous-vues, mais il ne semble pas en être autrement. J'ai fait le faire fonctionner par l'obtention de la police de l'étiquette de la sous-vue, puis j'ai pu calculer le titre de la largeur et de diviser l'espace de façon uniforme.
Yep. C'était la meilleure solution que j'ai pu trouver quand j'étais dans le même problème.
OriginalL'auteur booleanBoy
iOS 7.1.1 sympathique. Nous avons calculer UISegmentedControl nouvelle taille de l'image seulement et le reste (les segments proportions) sera adressé par l'iOS (basé sur apportionsSegmentWidthsByContent).
Être conscient que cela ne fonctionne pas si la Mise en page Automatique est SUR.
Vous avez raison - c'est pourquoi il y a un
em
de l'unité, si vous savez ce que je veux dire. Donc, si c'est d'une certaine manière satisfaisante, veuillez vous repenser votre downvote.em = police.pointSize n'est pas satisfaisant du fait de la taille de la police définit la hauteur de pas la largeur du texte de chaque segment. Got it ?
Notez que tous vos “magie” se passe dans le
[segCtrl sizeToFit]
(basé surapportionsSegmentWidthsByContent
) etem
est utilisé ici uniquement comme un rembourrage (whitespace).OriginalL'auteur Krzysztof Przygoda