UIButton qui se redimensionne à la taille de ses titleLabel
J'ai un UIButton
que j'ajoute à mon avis du contrôleur de la vue dans un storyboard. - Je ajouter de centrage des contraintes de position et conduisant les contraintes de l'espace à la limite de sa largeur. Dans le code que j'ai ajouter:
self.button.titleLabel.numberOfLines = 0;
self.button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
[self.button setTitle:@"A real real real real real real real real long long name." forState:UIControlStateNormal];
self.button.backgroundColor = [UIColor redColor];
self.button.titleLabel.backgroundColor = [UIColor blueColor];
Le résultat est illustré ci-dessous:
Je veux que le bouton à la taille de son contenu. Comment puis-je faire cela?
J'ai essayé
[self.button sizeToFit];
et j'ai essayé de définir le contenu des câlins et de la compression résistance à la mise en page automatique des contraintes priorités nécessaires.
J'ai aussi essayé de définir explicitement la contentEdgeInsets
et titleEdgeInsets
à UIEdgeInsetsZero
et de l'appel de invalidateIntrinsicContentSize
.
J'ai aussi remarqué que si je place les caractères de saut de ligne dans la chaîne de titre, le bouton ne semble pas redimensionner pour s'adapter à son contenu.
Je suis en cours d'exécution sur Xcode 6 et iOS 8 sur l'iPhone 6 Simulateur.
Vous devez vous connecter pour publier un commentaire.
J'ai eu à travailler, mais vous devez utiliser un bouton personnalisé, pas un type de système. Donner la touche à la fois la largeur et la hauteur des contraintes, et de faire un IBOutlet à la hauteur de la contrainte (heightCon dans mon code) de sorte que vous pouvez l'ajuster dans le code.
Après Edit:
J'ai trouvé que vous pouvez également le faire plus simplement, et avec un système de bouton si vous faites une sous-classe, et l'utilisation de ce code,
Remplacés intrinsicContentSize méthode est appelée lorsque vous définissez le titre. Vous ne devriez pas régler une hauteur de contrainte dans ce cas.
Swift 4.x version de Kubba de l' réponse:
Besoin de mettre à Jour Saut de Ligne comme Clip/WordWrap/ dans Interface builder pour boutons correspondants.
imageView
's de la taille et decontentEdgeInsets
trop. pour ce code.Suis même question. Il ne se produit que si
UIButton
'stitleLabel
a plus d'une ligne. Est-ce un bug dans UIKit?Ma solution Swift:
J'ai du mal avec ça pendant un moment et fini par faire ce travail par sous-classement UIButton et l'ajout de ces deux fonctions
Je suis loin de mon ordinateur donc je ne peux pas ajouter le code pour l'instant, mais j'ai trouvé une solution de contournement de cette avant.
Ce que vous pouvez faire est de créer un
UILabel
et ajouter unUITapGestureRecognizer
à l'étiquette. Faire ce que vous voulez de l'action du bouton par la manipulation de la appuyez sur un événement. Et aussi assurez-vous d'activer les interactions de l'utilisateur sur leUILabel
.Ce label va maintenant se comporter comme une auto redimensionnement bouton.
UILabel.textColor
etUILabel.highlightedTextColor
propriétés. Puis plus tard, vous pouvez mettre à jourUILabel.highlighted
de la propriété afin de changer la couleur du texte (par exemple, dépend de UITapGestureRecognizer de l'état). RésuméCe que je suggère, c'est de calculer la largeur du texte, et calculer l'image par vous-même. Ce n'est pas compliqué de toute façon, obtenir la largeur du texte premier:
Faire un mod fonctionnement et vous pourrez facilement trouver le nombre de lignes du texte.
Remarque cette méthode est pour les pré iOS7, iOS 7 et après, vous pourriez vouloir essayer
[self.bouton sizeToFit] devrait fonctionner si votre mise en page automatique est Désactivée. Si vous devez utiliser la mise en forme automatique, puis d'autres suggestions (calcul de la largeur de ligne), etc sont plus appropriés.
J'ai eu le même problème avec
UIButton
avec multilined texte, et il y avait aussi une image. J'ai utilisésizeThatFits:
pour calculer la taille mais elle mal calculé la hauteur.Je ne me suis pas
UIButtonTypeCustom
, au lieu de cela, j'ai appelésizeThatFits:
sur le bouton detitleLabel
avec la taille avec une plus petite largeur (en raison de l'image dans le bouton):Et ensuite, j'ai utilisé de la hauteur de cette taille à bouton de réglage de l'image correctement, et cela a FONCTIONNÉ 🙂
Peut-être qu'ils ont quelques bug en interne dimensionnement de
UIButton
.Remplacer l' -(CGSize)intrinsicContentSize dans la Coutume UIButton comme indiqué ci-dessous.
Objective - C:
Swfit :
J'ai dû invalider la valeur intrinsèque de la taille du contenu lorsque les points de vue ont été aménagés et ensuite calculer la hauteur du bouton pour le intrinsicContentSize de la propriété.
Voici le code à Swift3/Xcode 9