¿Cómo establecer la altura de UITextField?


130

Estoy usando a UITextField. Quiero aumentar su altura, pero no he encontrado ninguna propiedad para hacer esto. ¿Cómo puedo conseguir esto?

Respuestas:


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

44
es mucho más fácil abrir .xib como fuente, encontrar su IBUITextField y cambiar la propiedad <string key = "NSFrame">
HotJard

Lo intenté pero no hizo nada por mí. ¿Dónde pones esas líneas? Lo puse en el método initWithNibName.
janex

debería estar en viewDidLoad o ViewWillAppear / viewDidApper
Manjunath

2
La altura predeterminada de un UITextField es 31, para cualquiera que agregue uno programáticamente y desee una altura predeterminada
simon_smiley

2
@HotJard que recomendaría contra la piratería en la fuente del guión gráfico, tiende a restablecer algunos de sus valores Por ejemplo, cuando configura la altura del campo de texto de esa manera, y agrega un botón a la vista y edita el tamaño del texto del botón, los campos de texto en la vista volverán a su altura predeterminada.
Kevin

212

No puede cambiar la altura del estilo de borde rectángulo redondeado. Para establecer la altura, simplemente elija cualquier estilo de borde que no sea el borde redondeado en Xcode:

ingrese la descripción de la imagen aquí


Acabo de modificar setCornerRadius con 10.0 (o cualquiera) y obtuviste nuevamente UItextField con estilo de borde pero con altura personalizada :)
Beto

1
Una mejor manera es borderStyle = UITextBorderStyleRoundedRect;
Desaprobado Darren

¿Por qué no es posible?
apex39

151

¡Finalmente encontré la solución para esto!

Como hemos encontrado, IB no nos permite cambiar la altura del estilo del borde de la esquina redondeada. Así que cámbielo a cualquiera de los otros estilos y configure la altura deseada. En el código, cambie el estilo del borde hacia atrás.

textField.borderStyle = UITextBorderStyleRoundedRect;

Buen truco, pero ¿cómo puedes permitir la presentación de varias líneas del texto?
Lucien

77
@Lucien: ¿no sería un TextArea en lugar de un campo de texto
Craig, el

Esto me gusta aún más porque todavía puedo usar el diseñador.
RiddlerDev

Asegúrese de que esto se haga por dentro viewWillLayoutSubviews. leftViewAgregué una imagen al campo de texto y algo de texto, y cuando se hace viewDidLoadesto, ambos se estiran de manera extraña.

Para uso de Swift 3.0textField.borderStyle = .RoundedRect
Geoherna

85

Si está utilizando el diseño automático, puede hacerlo en el tablero de la historia.

Agregue una restricción de altura al campo de texto, luego cambie la constante de restricción de altura a cualquier valor deseado. Los pasos se muestran a continuación:

Paso 1: cree una restricción de altura para el campo de texto

ingrese la descripción de la imagen aquí

Paso 2: Seleccione Restricción de altura

ingrese la descripción de la imagen aquí

Paso 3: Cambiar el valor constante de la restricción de altura

ingrese la descripción de la imagen aquí


Funcionó pero recibí esta nueva advertencia, alguna idea: la posición es ambigua para "Campo de texto de estilo redondo"
Esqarrouth

Si dice que Posición es ambigua, significa que es posible que no tenga una restricción para colocar el objeto UITextField. ¿Puedes intentar agregar una restricción para definir x e y? Ejemplo, podría agregar una restricción de espacio inicial (para x) y podría agregar una restricción de espacio vertical desde la parte superior.
user1046037

stackoverflow.com/questions/21295136/… cuando hago eso agregué una pantalla de impresión
Esqarrouth

Un consejo para encontrar la restricción de altura correcta para la fuente que está utilizando: establezca borderStylecualquier cosa excepto redondeada. Use Editor -> Size to Fit Contentpara que el diseño haga lo suyo. Use el inspector de propiedades en su UITextFieldpara verificar su altura. Use esto para configurar su restricción de altura, y ahora puede cambiar la parte borderStyleposterior a la redondeada.
Benjohn

¿Puedo hacerlo programáticamente?
LKM

30

1.) Cambie el estilo del borde en InterfaceBuilder.

ingrese la descripción de la imagen aquí

2.) Después de eso puedes cambiar el tamaño.

ingrese la descripción de la imagen aquí

3.) Cree un IBOutlet en su TextField e ingrese el siguiente código para viewDidLoad()volver a cambiar el BorderStyle.

textField.borderStyle = UITextBorderStyleRoundedRect;

Swift 3:

textField.borderStyle = UITextBorderStyle.roundedRect

Gracias @David Seek
Vinoth Vino

29
  1. Elija el estilo de borde como no redondeado

ingrese la descripción de la imagen aquí

  1. Establece tu altura

ingrese la descripción de la imagen aquí

En su vista, aparecerá Establecer las esquinas como redondas

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

ingrese la descripción de la imagen aquí

  1. Disfruta de tu UITextField redondo y alto

¡¡Excelente!! Me ha ayudado.
Augustine PA

1
Esto fue genial, me ayudó durante 3/4 rápido que tuve que usar, ...... yourTextField.borderStyle = UITextBorderStyle
Tony Merritt

1
Cambió a UITextField.BorderStyle
smj

14

Siga estos dos simples pasos y aumente la altura de su UItextField.

Paso 1: haga clic derecho en el archivo XIB y ábralo como en "Código fuente".

Paso 2: encuentre la misma UITextfieldfuente y configure el marco que desee.

Puede usar estos pasos para cambiar el marco de los controles de Apple.


1
Divertido pero esta es la mejor manera :)
VisioN

44
Esta no es la mejor manera cuando se piensa en otra programador tratando de encontrar dónde se setted altura
bucherland

1
Esto suena como una idea terrible. Debe considerar la fuente XIB como una API privada. Puede cambiar por debajo de usted en futuras versiones de Xcode. Sin mencionar que ha ocultado su personalización en el último lugar donde cualquier persona sensata la buscará en el futuro.
Michael Peterson

8

Una actualización para iOS 6: usando el diseño automático, aunque todavía no puede establecer la altura de UITextField desde el Inspector de tamaño en el Creador de interfaces (a partir de Xcode 4.5 DP4 al menos), ahora es posible establecer una restricción de Altura en puede editarlo desde el Creador de interfaces.

Además, si está configurando la altura del marco por código, el diseño automático puede restablecerlo dependiendo de las otras restricciones que pueda tener su vista.


1
Esto es lo que estoy buscando ... pero, ¿cómo configuro la restricción de altura para que expanda la altura dinámicamente en función del contenido de UITextField?
jbandi

func updateTextFields () {if #available (iOS 11, *) {} else {nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits (CGSize (width: 1000, height: 500)). height nameTextField.borderStyle =. roundedRect}} Deseo que mis textFields de roundBorder ajusten su altura en función de la fuente adaptativa que establezco en ellos. Esto funciona de forma predeterminada en iOS 11, pero no funciona en absoluto en iOS 9,10. Yo uso el siguiente código:
PhoneyDeveloper

6

Sé que esta es una pregunta antigua, pero solo quería agregar si desea cambiar fácilmente la altura de un UITextField desde el interior de IB y luego simplemente cambiar el tipo de borde de UITextfield a cualquier otro que no sea el tipo de esquina redondeada predeterminado. Luego puede estirar o cambiar fácilmente los atributos de altura desde el interior del editor.


4

swift3

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

Interface Builder

  • Reemplazar UITextFieldconBigTextField .
  • Cambia el Border Style a none.

Esta es, con mucho, la mejor solución.
ilovebigmacs

3

Mi patética contribución a este tonto problema. En IB establezca el estilo en none para que pueda establecer la altura, luego en IB establezca la clase como una subclase de UITextFieldque obliga al estilo a redondearse rect.

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

Me evitó tener que hackear el archivo XIB o escribir código de estilo en mi controlador de vista.


3

En Swift 3 use:

yourTextField.frame.size.height = 30

2

La altura de un UITextField no es ajustable en el Inspector de atributos solo cuando tiene el estilo de borde de esquinas redondeadas predeterminado, sino que agrega una restricción de altura (más cualquier otra restricción que se requiera para satisfacer el sistema de distribución automática, a menudo simplemente usando Agregar restricciones faltantes) y ajustar la restricción ajustará la altura del campo de texto. Si no desea restricciones, las restricciones pueden eliminarse (Borrar restricciones) y el campo de texto permanecerá a la altura ajustada.

Funciona de maravilla.


1

prueba esto

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

Los dos últimos argumentos son ancho y alto. Puede establecer lo que desee ...


1

Puede usar la propiedad de marco de campo de texto para cambiar el marco Like-Textfield.frame = CGRECTMake (eje x, eje y, ancho, alto)


1

Esto es bastante simple

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

Declare su campo de texto como una propiedad global y cambie su marco donde quiera que lo haga en su código.

¡Feliz codificación!


2
Esta es una respuesta peligrosa y pasada de moda. Usar una variable global es una práctica terrible teniendo en cuenta que sobrevivirá a la vista, y la codificación de un tamaño no escalará bien con diseños flexibles.
Chris Conover

1

Si está creando mucho UITextFields, puede ser más rápido subclasificar UITextViewy anular el método setFrame con

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

De esta manera solo puedes llamar
[customTextField setFrame:<rect>];


0

Yo estaba teniendo el mismo problema. Probé algunas de las soluciones aquí, pero en lugar de hacer todo esto. Descubrí que establecer la restricción de altura es suficiente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.