Comment définir la hauteur de UITextField?


130

J'utilise un UITextField. Je souhaite augmenter sa hauteur mais je n'ai trouvé aucune propriété pour le faire. Comment puis-je atteindre cet objectif?

Réponses:


83
CGRect frameRect = textField.frame;
frameRect.size.height = 100; // <-- Specify the height you want here.
textField.frame = frameRect;

4
il est beaucoup plus facile d'ouvrir .xib en tant que source pour trouver votre IBUITextField et modifier la propriété <string key = "NSFrame">
HotJard

J'ai essayé ça mais ça n'a rien fait pour moi. Où mettez-vous ces lignes? Je l'ai mis dans la méthode initWithNibName.
janex

il devrait être dans viewDidLoad ou ViewWillAppear / viewDidApper
Manjunath

2
La hauteur par défaut d'un UITextField est de 31, pour quiconque en ajoute un par programme et en veut une hauteur par défaut
simon_smiley

2
@HotJard Je recommanderais de ne pas pirater la source du storyboard, cela a tendance à réinitialiser certaines de ses valeurs. Par exemple, lorsque vous définissez la hauteur du champ de texte comme cela, et que vous ajoutez un bouton à la vue et que vous modifiez la taille du texte du bouton, les champs de texte de la vue reviennent à leur hauteur par défaut.
Kevin le

212

Vous ne pouvez pas modifier la hauteur du style de bordure rectangle arrondi. Pour définir la hauteur, choisissez simplement n'importe quel style de bordure autre que la bordure arrondie dans Xcode:

entrez la description de l'image ici


Juste modifié setCornerRadius avec 10.0 (ou n'importe quel) et vous avez à nouveau UItextField avec style de bordure mais avec hauteur personnalisée :)
Beto

1
Un meilleur moyen est borderStyle = UITextBorderStyleRoundedRect;
Obsolète Darren le

Pourquoi est-ce impossible?
apex39

151

J'ai enfin trouvé le correctif pour cela!

Comme nous l'avons constaté, IB ne nous permet pas de modifier la hauteur du style de bordure d'angle arrondi. Alors changez-le pour l'un des autres styles et définissez la hauteur souhaitée. Dans le code, modifiez le style de la bordure.

textField.borderStyle = UITextBorderStyleRoundedRect;

Bonne astuce, mais comment autoriser une présentation multi-lignes du texte?
Lucien

7
@Lucien - Ne serait-ce pas un TextArea plutôt qu'un champ de texte
Craig

J'aime encore mieux cela car je peux toujours utiliser le designer.
RiddlerDev

Assurez-vous que cela est fait à l'intérieur viewWillLayoutSubviews. J'ai ajouté une image au leftViewchamp de texte et du texte, et lorsque cela est fait, viewDidLoadils s'étirent tous les deux de manière étrange.

Pour Swift 3.0textField.borderStyle = .RoundedRect
Geoherna

85

Si vous utilisez la mise en page automatique, vous pouvez le faire sur le story-board.

Ajoutez une contrainte de hauteur au champ de texte, puis remplacez la constante de contrainte de hauteur par la valeur souhaitée. Les étapes sont indiquées ci-dessous:

Étape 1: créer une contrainte de hauteur pour le champ de texte

entrez la description de l'image ici

Étape 2: Sélectionnez la contrainte de hauteur

entrez la description de l'image ici

Étape 3: modifier la valeur constante de la contrainte de hauteur

entrez la description de l'image ici


Cela a fonctionné mais j'ai eu ce nouvel avertissement, toutes les idées: La position est ambiguë pour "Round Style Text Field"
Esqarrouth

Si la position est ambiguë, cela signifie que vous n'avez peut-être pas de contrainte pour positionner l'objet UITextField. Pouvez-vous essayer d'ajouter une contrainte pour définir les x et y. Par exemple, vous pouvez ajouter une contrainte d'espace de début (pour x) et vous pouvez ajouter une contrainte d'espace vertical à partir du haut.
user1046037

stackoverflow.com/questions/21295136/… quand je fais cela, j'ai ajouté un écran d'impression
Esqarrouth

Un conseil pour trouver la contrainte de hauteur correcte pour la police que vous utilisez: Définissez borderStylesur tout sauf arrondi. Utilisez Editor -> Size to Fit Contentpour que la mise en page fasse son travail. Utilisez l'inspecteur de propriétés sur votre UITextFieldpour vérifier sa hauteur. Utilisez ceci pour configurer votre contrainte de hauteur, et maintenant vous pouvez changer le borderStyledos en arrondi.
Benjohn

Puis-je le faire par programme?
LKM

30

1.) Modifiez le style de bordure dans InterfaceBuilder.

entrez la description de l'image ici

2.) Après cela, vous pouvez changer la taille.

entrez la description de l'image ici

3.) Créez un IBOutlet sur votre TextField et entrez le code suivant dans votre viewDidLoad()pour modifier le BorderStyle.

textField.borderStyle = UITextBorderStyleRoundedRect;

Swift 3:

textField.borderStyle = UITextBorderStyle.roundedRect

Merci @David Seek
Vinoth Vino

29
  1. Choisissez le style de bordure comme non arrondi

entrez la description de l'image ici

  1. Réglez votre taille

entrez la description de l'image ici

dans votre vue, apparaîtra définir les coins comme ronds

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

entrez la description de l'image ici

  1. Profitez de votre UITextField rond et haut

Génial!! Cela m'a aidé.
Augustine PA

1
C'était génial, cela a aidé pour les 3/4 rapides que j'ai dû utiliser, ...... yourTextField.borderStyle = UITextBorderStyle.roundedRect
Tony Merritt

1
Il a changé en UITextField.BorderStyle.roundedRect
smj

14

Suivez ces deux étapes simples et augmentez la hauteur de votre UItextField.

Étape 1: faites un clic droit sur le fichier XIB et ouvrez-le comme dans "Code source".

Étape 2: Trouvez la même UITextfieldsource et définissez le cadre comme vous le souhaitez.

Vous pouvez utiliser ces étapes pour changer le cadre de toutes les commandes Apple.


1
Drôle mais c'est la meilleure façon :)
VisioN

4
Ce n'est pas le meilleur moyen lorsque vous pensez à un autre programmeur essayant de trouver où la hauteur est
réglée

1
Cela ressemble à une idée terrible. Vous devez considérer la source XIB comme une API privée. Cela peut changer sous vous dans la future version de Xcode. Sans oublier que vous avez caché votre personnalisation à la dernière place que toute personne sensée la recherchera à l'avenir.
Michael Peterson

8

Une mise à jour pour iOS 6: en utilisant la mise en page automatique, même si vous ne pouvez toujours pas définir la hauteur de UITextField à partir de l'inspecteur de taille dans l'interface Builder (à partir de Xcode 4.5 DP4 au moins), il est désormais possible de définir une contrainte de hauteur sur il, que vous pouvez modifier à partir de l'Interface Builder.

De plus, si vous définissez la hauteur du cadre par code, la mise en page automatique peut le réinitialiser en fonction des autres contraintes que votre vue peut avoir.


1
C'est ce que je recherche ... mais comment définir la contrainte de hauteur pour qu'elle élargisse la hauteur de manière dynamique en fonction du contenu de l'UITextField?
jbandi

func updateTextFields () {if #available (iOS 11, *) {} else {nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits (CGSize (width: 1000, height: 500)). height nameTextField.borderStyle =. RoundRect}} Je veux que mes roundBorder textFields ajustent leur hauteur en fonction de la police adaptative que je leur attribue. Cela fonctionne directement sur iOS 11 mais ne fonctionne pas du tout sur iOS 9,10. J'utilise le code suivant:
PhoneyDeveloper

6

Je sais que c'est une vieille question, mais je voulais juste ajouter si vous souhaitez changer facilement la hauteur d'un UITextField à partir de l'intérieur de IB, puis changez simplement le type de bordure de ce UITextfield en autre chose que le type de coin arrondi par défaut. Ensuite, vous pouvez étirer ou modifier facilement les attributs de hauteur depuis l'éditeur.


4

swift3

@IBDesignable
class BigTextField: UITextField {
    override func didMoveToWindow() {
        super.didMoveToWindow()
        if window != nil {
            borderStyle = .roundedRect
        }
    }
}

Générateur d'interface

  • Remplacez UITextFieldpar BigTextField.
  • Remplacez le Border Style par none.

C'est de loin la meilleure solution.
ilovebigmacs

3

Ma contribution pathétique à ce problème stupide. Dans IB, définissez le style sur aucun pour pouvoir définir la hauteur, puis dans IB, définissez la classe comme une sous-classe de ce UITextFieldqui force le style à être arrondi rect.

@interface JLTForcedRoundedRectTextField : UITextField
@end

@implementation JLTForcedRoundedRectTextField
- (void)awakeFromNib
{
    self.borderStyle = UITextBorderStyleRoundedRect;
}
@end

Cela m'a évité d'avoir à pirater le fichier XIB ou à écrire du code de style dans mon contrôleur de vue.


3

Dans Swift 3, utilisez:

yourTextField.frame.size.height = 30

2

La hauteur d'un UITextField n'est pas réglable dans l'inspecteur d'attributs uniquement lorsqu'il a le style de bordure des coins arrondis par défaut, mais en ajoutant une contrainte de hauteur (ainsi que toute autre contrainte requise pour satisfaire le système de disposition automatique - souvent en utilisant simplement Ajouter des contraintes manquantes) et l'ajustement de la contrainte ajustera la hauteur du champ de texte. Si vous ne voulez pas de contraintes, les contraintes peuvent être supprimées (Effacer les contraintes) et le champ de texte restera à la hauteur ajustée.

Fonctionne comme un charme.


1

essaye ça

UITextField *field = [[UITextField alloc] initWithFrame:CGRectMake(20, 80, 280, 120)];

1
UITextField *txt = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    [txt setText:@"Ananth"];
    [self.view addSubview:txt];

Les deux derniers arguments sont la largeur et la hauteur, vous pouvez définir comme vous le souhaitez ...


1

Vous pouvez utiliser la propriété frame de textfield pour changer le cadre Like-Textfield.frame = CGRECTMake (axe x, axe y, largeur, hauteur)


1

Ceci est assez simple.

yourtextfield.frame = CGRectMake (yourXAxis, yourYAxis, yourWidth, yourHeight);

Déclarez votre champ de texte en tant que propriété gloabal et changez son cadre où vous voulez le faire dans votre code.

Bon codage!


2
C'est une réponse dangereuse et dépassée. L'utilisation d'une variable globale est une pratique terrible car elle survivra à la vue et le codage en dur d'une taille ne sera pas bien mis à l'échelle avec des mises en page flexibles.
Chris Conover

1

Si vous en créez beaucoup, UITextFieldsil peut être plus rapide de sous-classes UITextViewet de remplacer la méthode setFrame avec

-(void)setFrame:(CGRect)frame{
    [self setBorderStyle:UITextBorderStyleRoundedRect];
    [super setFrame:frame];
    [self setBorderStyle:UITextBorderStyleNone];
}  

De cette façon, vous pouvez simplement appeler
[customTextField setFrame:<rect>];


0

J'avais le même problème. essayé certaines des solutions ici, mais plutôt que de faire tout cela mumbo-jumbo. J'ai trouvé qu'il suffisait de définir une contrainte de hauteur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.