Las vistas leftView y rightView de un UITextField en iOS7 están muy cerca del borde del campo de texto.
¿Cómo puedo agregar algo de relleno (horizontal) a esos elementos?
Intenté modificar el marco, pero no funcionó.
uint padding = 10;//padding for iOS7
UIImageView * iconImageView = [[UIImageView alloc] initWithImage:iconImage];
iconImageView.frame = CGRectMake(0 + padding, 0, 16, 16);
textField.leftView = iconImageView;
Tenga en cuenta que no me interesa agregar relleno al texto del campo de texto, como este Establecer relleno para UITextField con UITextBorderStyleNone
ios
objective-c
uitextfield
bajo cero
fuente
fuente
Respuestas:
Estaba trabajando en esto yo mismo y usé esta solución:
Esto moverá la imagen de la derecha en 10 en lugar de apretar la imagen contra el borde en iOS 7.
Además, esto estaba en una subclase de
UITextField
, que puede crearse mediante:UITextField
lugar del predeterminadoNSObject
Agregue un nuevo método llamado
- (id)initWithCoder:(NSCoder*)coder
para configurar la imagenPuede que tengas que importar
#import <QuartzCore/QuartzCore.h>
Agrega el
rightViewRectForBounds
método anteriorEn Interface Builder, haga clic en el TextField que le gustaría subclase y cambie el atributo de clase al nombre de esta nueva subclase
fuente
Una solución mucho más sencilla, que aprovecha
contentMode
:En Swift 3,
fuente
La forma más fácil es agregar un UIView a leftView / righView y agregar un ImageView a UIView, ajustar el origen de ImageView dentro de UIView en cualquier lugar que desee, esto funcionó para mí como un encanto. Solo necesita unas pocas líneas de código
fuente
UIViewContentMode
¡No funciona, pero esta respuesta funciona como un encanto!Esto funciona muy bien para Swift:
fuente
Esto funciona para mi
Que te ayude.
fuente
Me gusta esta solución porque resuelve el problema con una sola línea de código.
Nota: .. o 2 si considera incluir QuartzCore en una línea :)
fuente
La mejor manera de hacer esto es simplemente crear una clase usando la subclase de UITextField y en el archivo .m
al hacer esto, vaya a su guión gráfico o xib y haga clic en el inspector de identidad y reemplace UITextfield con su propia opción "CustomTextField" en la clase.
Nota: Si simplemente proporciona relleno con diseño automático para el campo de texto, su aplicación no se ejecutará y solo mostrará una pantalla en blanco.
fuente
En lugar de manipular imageView o image, podemos anular un método proporcionado por apple para rightView.
y de la misma manera podemos anular la función de abajo para la vista izquierda.
fuente
Encontré esto en alguna parte ...
fuente
Rápido 5
Querrás:
UITextField
UIView
imagen más grande que suUITextField.rightView
fuente
Aquí hay una solución:
fuente
Cree una clase UITextField personalizada y use esa clase en lugar de UITextField. Override - (CGRect) textRectForBounds: (CGRect) límites para establecer el rect que necesita
Ejemplo
fuente
El siguiente ejemplo es para agregar relleno horizontal a una vista izquierda que resulta ser un icono; puede usar un enfoque similar para agregar relleno a cualquiera
UIView
que le gustaría usar como vista izquierda del campo de texto.Dentro de la
UITextField
subclase:Aunque somos una subclase
UITextField
aquí, creo que este es el enfoque más limpio.fuente
fuente
UITextField
está incrustado en aUISearchBar
, ¿cómo le diceUISearchBar
que use suUITextField
subclase?gracias chicos por sus respuestas, para mi sorpresa, ninguno de ellos realmente encajó la imagen de la vista correcta en mi campo de texto sin dejar de proporcionar el relleno necesario. luego pensé en usar el modo AspectFill y sucedieron milagros. para futuros buscadores, esto es lo que usé:
el 35 en el marco de mi vista de imagen representa la altura de mi campo de texto de correo electrónico, no dude en ajustarlo a sus necesidades.
fuente
Yo mismo he tenido este problema y, con mucho, la solución más fácil es modificar su imagen para simplemente agregar relleno a cada lado de la imagen.
Acabo de modificar mi imagen png para agregar un relleno transparente de 10 píxeles, y funciona bien, ¡sin codificación alguna!
fuente
Si está usando un UIImageView como leftView, entonces debe usar este código:
Precaución: No use viewWillAppear interior o viewDidAppear
fuente
Creé un método personalizado en mi clase ViewController, como se muestra a continuación:
Ahora puedo llamar a ese método dentro de (
viewDidLoad
método) y enviar cualquiera de misTextFields
a ese método y agregar relleno tanto para la derecha como para la izquierda, y dar texto y colores de fondo escribiendo solo una línea de código, de la siguiente manera:¡Esto funcionó perfectamente en iOS 7! ¡Espero que esto también funcione en iOS 8 y 9 también!
Sé que agregar demasiadas vistas puede hacer que este objeto sea un poco más pesado para cargar. Pero cuando me preocupaba la dificultad en otras soluciones, me encontré más predispuesto a este método y más flexible al usarlo. ;)
Espero que esta respuesta pueda ser útil o útil para encontrar otra solución para otra persona.
¡Salud!
fuente
Esto funciona para mí al igual que busco:
fuente
Desde iOS 13 y Xcode 11, esta es la única solución que nos funciona.
fuente
// Establecer vista derecha de UITextField, swift 4.2
TxtPass.rightViewMode = UITextField.ViewMode.always let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 18, height: 18)) imageView.contentMode = UIView.ContentMode.scaleAspectFit let image = UIImage(named: "hidepass") imageView.image = image let rightView = UIView(frame: CGRect(x: 0, y: 0, width: 28, height: 18)) rightView.addSubview(imageView) rightView.contentMode = UIView.ContentMode.left TxtPass.rightView = rightView
fuente
Un truco: agregue un UIView que contenga UIImageView a UITextField como rightView. Este UIView debe ser de mayor tamaño, ahora coloque el UIImageView a la izquierda. Entonces habrá un relleno de espacio desde la derecha.
fuente
La forma más fácil es simplemente cambiar el campo de texto como RoundRect en lugar de personalizado y ver la magia. :)
fuente
para Swift2, uso
fuente
fuente
Enfoque simple:
Nota: La altura debe ser menor que el ancho para permitir un acolchado horizontal.
fuente
Me doy cuenta de que esta es una publicación antigua y esta respuesta es un poco específica para mi caso de uso, pero la publiqué en caso de que otros busquen una solución similar. Quiero mover leftView o rightView de UITextField pero no estoy poniendo imágenes en ellos y no quiero constantes codificadas.
Mi interfaz de usuario pide ocultar el botón de borrar del campo de texto y mostrar un UIActivityIndicatorView donde se encontraba el botón de borrar.
Agregué una ruleta al
rightView
, pero fuera de la caja (en iOS 13) se desplazó 20 píxeles a la derecha delclearButton
. No me gusta usar números mágicos ya que la posición de clearButton y rightView están sujetos a cambios en cualquier momento por parte de Apple. La intención del diseño de la interfaz de usuario es "ruleta donde está el botón de borrar", por lo que mi solución fue subclase UITextField y anularrightViewRect(forBounds)
.A continuación se muestra un ejemplo de trabajo (sans Storyboard):
fuente