Come impostare l'altezza UITextField?


130

Sto usando un UITextField. Voglio aumentare la sua altezza ma non ho trovato alcuna proprietà per farlo. Come posso raggiungere questo obiettivo?

Risposte:


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

4
è molto più facile aprire .xib come sorgente trova il tuo IBUITextField e cambia la proprietà <string key = "NSFrame">
HotJard

Ci ho provato ma non ha fatto nulla per me. Dove metti quelle linee? L'ho inserito nel metodo initWithNibName.
janex,

dovrebbe essere in viewDidLoad o ViewWillAppear / viewDidApper
Manjunath

2
L'altezza predefinita di un UITextField è 31, per chiunque ne aggiunga uno a livello di programmazione e lo desideri come altezza predefinita
simon_smiley

2
@HotJard Vorrei raccomandare contro la pirateria informatica nella fonte dello storyboard, tende a ripristinare alcuni dei suoi valori. Ad esempio, quando si imposta l'altezza del campo di testo in questo modo e si aggiunge un pulsante alla vista e si modifica la dimensione del testo del pulsante, i campi di testo nella vista torneranno alla loro altezza predefinita.
Kevin,

212

Non è possibile modificare l'altezza dello stile del bordo rettangolo arrotondato. Per impostare l'altezza, basta scegliere qualsiasi stile di bordo diverso dal bordo arrotondato in Xcode:

inserisci qui la descrizione dell'immagine


Ho appena modificato setCornerRadius con 10.0 (o qualsiasi) e hai di nuovo UItextField con stile del bordo ma con altezza personalizzata :)
Beto,

1
Un modo migliore è borderStyle = UITextBorderStyleRoundedRect;
Deprecato Darren,

Perché non è possibile?
apex39,

151

Ho finalmente trovato la soluzione per questo!

Come abbiamo scoperto, IB non ci consente di modificare l'altezza dello stile del bordo degli angoli arrotondati. Quindi cambiarlo in uno qualsiasi degli altri stili e impostare l'altezza desiderata. Nel codice cambia di nuovo lo stile del bordo.

textField.borderStyle = UITextBorderStyleRoundedRect;

Buon trucco, ma come puoi consentire la presentazione multilinea del testo?
Lucien l'

7
@Lucien - Non sarebbe un TextArea piuttosto che un campo di testo
Craig

Mi piace ancora di più perché posso ancora usare il designer.
RiddlerDev,

Assicurati che ciò avvenga all'interno viewWillLayoutSubviews. Ho aggiunto un'immagine al campo leftViewdi testo e un po 'di testo, e quando questo viene fatto in viewDidLoadentrambi si estendono in modo strano.

Per Swift 3.0 utilizzaretextField.borderStyle = .RoundedRect
Geoherna il

85

Se si utilizza il layout automatico, è possibile farlo sulla scheda Storia.

Aggiungere un vincolo di altezza al campo di testo, quindi modificare la costante del vincolo di altezza su qualsiasi valore desiderato. I passaggi sono indicati di seguito:

Passaggio 1: creare un vincolo di altezza per il campo di testo

inserisci qui la descrizione dell'immagine

Passaggio 2: selezionare Vincolo altezza

inserisci qui la descrizione dell'immagine

Passaggio 3: modificare il valore costante del vincolo di altezza

inserisci qui la descrizione dell'immagine


Ha funzionato ma ho ricevuto questo nuovo avvertimento, qualsiasi idea: la posizione è ambigua per "Campo di testo in stile rotondo"
Esqarrouth,

Se dice Posizione è ambigua, significa che potresti non avere un vincolo per posizionare l'oggetto UITextField. Puoi provare ad aggiungere un vincolo per definire xey. Esempio è possibile aggiungere un vincolo di spazio iniziale (per x) e aggiungere un vincolo di spazio verticale dall'alto.
user1046037

stackoverflow.com/questions/21295136/… quando lo faccio ho aggiunto una schermata di stampa
Esqarrouth,

Un suggerimento per trovare il vincolo di altezza corretto per il carattere che si sta utilizzando: impostare borderStylesu qualsiasi cosa tranne che arrotondato. Utilizzare Editor -> Size to Fit Contentper fare in modo che il layout faccia la sua parte. Utilizza la finestra di ispezione proprietà UITextFieldper verificare la sua altezza. Usa questo per impostare il tuo vincolo di altezza, e ora puoi cambiare la borderStyleschiena in quella arrotondata.
Benjohn,

Posso farlo programmaticamente?
LKM,

30

1.) Modifica lo stile del bordo in InterfaceBuilder.

inserisci qui la descrizione dell'immagine

2.) Dopo di che puoi cambiare la dimensione.

inserisci qui la descrizione dell'immagine

3.) Crea un IBOutlet su TextField e inserisci il seguente codice viewDidLoad()per modificare BorderStyle.

textField.borderStyle = UITextBorderStyleRoundedRect;

Swift 3:

textField.borderStyle = UITextBorderStyle.roundedRect

Grazie @David Seek
Vinoth Vino,

29
  1. Scegli lo stile del bordo come non arrotondato

inserisci qui la descrizione dell'immagine

  1. Imposta la tua altezza

inserisci qui la descrizione dell'immagine

a tuo avviso apparirà impostare gli angoli come rotondi

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

inserisci qui la descrizione dell'immagine

  1. Goditi il ​​tuo UITextField rotondo e alto

Grande!! Mi ha aiutato.
Agostino PA,

1
È stato grandioso, mi ha aiutato per il rapido 3/4 che ho dovuto usare, ...... yourTextField.borderStyle = UITextBorderStyle.roundedRect
Tony Merritt,

1
È stato modificato in UITextField.BorderStyle.roundedRect
smj

14

Segui questi due semplici passaggi e aumenta l'altezza del tuo UItextField.

Passaggio 1: fare clic con il tasto destro sul file XIB e aprirlo come in "Codice sorgente".

Passaggio 2: trova la stessa UITextfieldfonte e imposta il frame che desideri.

Puoi usare questi passaggi per cambiare il frame di qualsiasi controllo Apple.


1
Divertente ma questo è il modo migliore :)
VisioN

4
Questo non è il modo migliore quando pensi ad un altro programmatore che cerca di trovare dove è impostata l'altezza
bucherland

1
Sembra un'idea terribile. Dovresti considerare la fonte XIB come api privata. Potrebbe cambiare da sotto di te nella futura versione di Xcode. Per non parlare del fatto che hai nascosto la tua personalizzazione nell'ultimo posto in cui qualsiasi persona sana di mente la cercherà in futuro.
Michael Peterson,

8

Un aggiornamento per iOS 6: utilizzando il layout automatico, anche se non è ancora possibile impostare l'altezza di UITextField dall'Ispettore dimensioni in Interface Builder (almeno da Xcode 4.5 DP4), è ora possibile impostare un vincolo Altezza su esso, che è possibile modificare da Interface Builder.

Inoltre, se stai impostando l'altezza della cornice in base al codice, il layout automatico potrebbe ripristinarla a seconda degli altri vincoli che la tua vista potrebbe avere.


1
Questo è quello che sto cercando ... ma come posso impostare il vincolo di altezza in modo che espanda l'altezza in modo dinamico in base al contenuto di UITextField?
jbandi,

func updateTextFields () {if #available (iOS 11, *) {} else {nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits (CGSize (larghezza: 1000, altezza: 500)). altezza nomeTextField.borderStyle =. arrotondatoRetto}} Voglio che i miei campi di testo roundBorder regolino la loro altezza in base al carattere adattivo che sto impostando su di essi. Funziona immediatamente su iOS 11 ma non funziona su iOS 9,10. Uso il seguente codice:
PhoneyDeveloper

6

So che questa è una vecchia domanda, ma volevo solo aggiungere se si desidera modificare facilmente l'altezza di un UITextField dall'interno di IB, quindi cambiare semplicemente il tipo di bordo di UITextfield in qualcosa di diverso dal tipo di angolo arrotondato predefinito. Quindi puoi allungare o modificare facilmente gli attributi di altezza dall'interno dell'editor.


4

swift3

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

Interface Builder

  • Sostituisci UITextFieldcon BigTextField.
  • Cambia Border Style in none.

Questa è di gran lunga la soluzione migliore.
ilovebigmacs

3

Il mio patetico contributo a questo stupido problema. In IB impostare lo stile su none in modo da poter impostare l'altezza, quindi in IB impostare la classe su una sottoclasse UITextFieldche forza lo stile ad essere arrotondato correttamente.

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

Mi ha impedito di dover hackerare il file XIB o scrivere codice di stile nel mio controller di visualizzazione.


3

In Swift 3 utilizzare:

yourTextField.frame.size.height = 30

2

L'altezza di un UITextField non è regolabile in Impostazioni attributi solo quando ha lo stile del bordo degli angoli arrotondati di default, ma l'aggiunta di un vincolo di altezza (più eventuali altri vincoli necessari per soddisfare il sistema di autolayout - spesso semplicemente usando Aggiungi vincoli mancanti) e regolando il vincolo si regolerà l'altezza del campo di testo. Se non si desidera vincoli, è possibile rimuoverli (Cancella vincoli) e il campo di testo rimarrà all'altezza corretta.

Funziona come un fascino.


1

prova questo

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];

Gli ultimi due argomenti sono larghezza e altezza, puoi impostare come desideri ...


1

È possibile utilizzare la proprietà frame del campo di testo per modificare il frame Like-Textfield.frame = CGRECTMake (asse x, asse y, larghezza, altezza)


1

Questo è abbastanza semplice

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

Dichiara il tuo campo di testo come una proprietà globale e cambia la sua cornice ovunque tu voglia farlo nel tuo codice.

Buona programmazione!


2
Questa è una risposta pericolosa e fuori moda. L'uso di una variabile globale è una pratica terribile considerando che sopravviverà alla vista e che una dimensione hardcoding non si ridimensionerà bene con layout flessibili.
Chris Conover,

1

Se ne stai creando molto UITextFields, può essere più veloce sottoclassare se UITextViewsovrascrivere il metodo setFrame

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

In questo modo puoi semplicemente chiamare
[customTextField setFrame:<rect>];


0

Stavo avendo lo stesso problema. ho provato alcune delle soluzioni qui ma piuttosto che fare tutto questo mumbo-jumbo. Ho scoperto che basta impostare il vincolo di altezza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.