Comment faire pour augmenter la largeur de champ selon le texte tapé?
J'ai besoin d'augmenter d'un champ de texte de largeur en fonction de son contenu. Lorsque l'utilisateur entre du texte, puis la zone de texte taille devrait augmenter automatiquement. J'ai un bouton fermer (X) à côté de ce champ de texte.
J'ai limité le champ de texte et un bouton de sorte que le champ de texte est centrée sur l'écran et le bouton adjacent. (Champ de texte doit être modifiable, le bouton doit être cliquable)
Taille du champ de texte est: est-ce
Quand je tape du texte, la taille devrait augmenter automatiquement:
Comment puis-je y parvenir?
- Check this out stackoverflow.com/questions/37355212/...
- Comment calculer la largeur du texte ? que j'ai taper
- Cochez cette stackoverflow.com/questions/30450434/...
- Je ne peux pas comprendre dans cette réponse , comment je donne la mise en page automatique première fois de ma textfield .
- Avec mise en page automatique, il n'est pas possible
- mais j'ai besoin de centre de l'écran , comment suis-je gérer cela ?
- vous feriez mieux de recherche de la bibliothèque de cette github.com/CosmicMind/Material
Vous devez vous connecter pour publier un commentaire.
Vous pouvez la réaliser avec prépondérant
UITextField
classe et le retour des valeurs personnalisées dansintrinsicContentSize
. Aussi, vous devez vous abonner à changement de texte de l'événement et de l'invalider intrinsèque de la taille du contenu sur le changement de texte animéIci est de donner l'exemple en Swift 3
- Je résoudre mon problème : utilisez ce pour textfield pas aller à l'extérieur de l'écran.
Objective-C Version
Une insolente solution de contournement pour obtenir la largeur, pour une chaîne particulière serait
Et pour obtenir la largeur,
Si vous avez une contrainte liée à txtField de la largeur, puis faire
Modifier
Nous créons un objet UITextField avec un cadre de l'ensemble des zéros. Lorsque vous appelez sizeToFit(), il fixe le cadre de UITextField de manière à montrer l'ensemble de son contenu, avec pratiquement pas d'espace supplémentaire autour d'elle. Nous voulions seulement sa largeur, donc je suis retourné à la largeur de la nouvellement créée UITextField. ARC prendra soin de le supprimer de la mémoire pour nous.
Mise à jour
self.view.layoutIfNeeded()
Mettre en œuvre après la méthode de
UITextFieldDelegate
. L'utilisation de l'approche fournies par Matt pour obtenir la largeur requise de textField. Dans mise en page automatique assurez-vous que vous avez centre et la largeur des contraintes pour textfield. Créer IBOutlet pour votre largeur de la contrainte dans le fichier de code. Aussi assurez-vous de définir délégué de la propriété de votre textFieldToutes les réponses à besoin d'un tas de code, mais vous pouvez tout faire interface builder; pas de code nécessaire.
Juste incorporer le textField dans un UIStackView et contraindre les empilervoir être inférieur ou égal à son superview moins une constante (si vous le souhaitez, vous pouvez aussi lui donner un minimum de largeur). Le empilervoir prendra soin de toujours faire le textField sa taille intrinsèque, ou le maxwidth de la empilervoir (qui est toujours plus petit), de sorte que vous tapez la taille change automatiquement pour s'ajuster au contenu.
Je pense que c'est une meilleure solution que d'avoir une largeur de contrainte que vous avez à modifier:
Redimensionner un objet UITextField lors de la frappe (en utilisant la mise en page automatique)
Vous pouvez omettre l'animation, si désiré..
MODIFIER: Voici un exemple de projet: https://github.com/TomSwift/growingTextField
Nous pouvons facilement le faire par la mise en UITextField contraintes comme ceci:
//Testé sur Xcode 9.1, Swift 4
De sortie:
Semble tellement frustrant qu'il n'y a pas de manière directe, comme il est "réduction automatique" à "taille Minimale de la Police" pour
UILabel
de l'IB lui-même.Le "redimensionnement" de l'IB pour un champ de texte n'est pas bon de trop.
Pourquoi est-ce qu'Apple nous faire écrire tout ce code réutilisable, lorsqu'un champ de texte des besoins de réduction automatique comme beaucoup si pas plus que la UILabel!