As visualizações leftView e rightView de um UITextField no iOS7 estão realmente perto da borda do campo de texto.
Como posso adicionar algum preenchimento (horizontal) a esses itens?
Tentei modificar a moldura, mas não funcionou
uint padding = 10;//padding for iOS7
UIImageView * iconImageView = [[UIImageView alloc] initWithImage:iconImage];
iconImageView.frame = CGRectMake(0 + padding, 0, 16, 16);
textField.leftView = iconImageView;
Observe que não estou interessado em adicionar preenchimento ao texto do campo de texto, como este Definir preenchimento para UITextField com UITextBorderStyleNone
ios
objective-c
uitextfield
abaixo de zero
fonte
fonte
Respostas:
Estava trabalhando nisso sozinho e usei esta solução:
Isso moverá a imagem da direita em 10 em vez de ter a imagem comprimida contra a borda no iOS 7.
Além disso, isso estava em uma subclasse de
UITextField
, que pode ser criada por:UITextField
vez do padrãoNSObject
Adicione um novo método chamado
- (id)initWithCoder:(NSCoder*)coder
para definir a imagemVocê pode ter que importar
#import <QuartzCore/QuartzCore.h>
Adicione o
rightViewRectForBounds
método acimaNo Interface Builder, clique no TextField que deseja criar como subclasse e altere o atributo de classe para o nome desta nova subclasse
fonte
Uma solução muito mais simples, que tira proveito de
contentMode
:Em Swift 3,
fonte
A maneira mais fácil é adicionar um UIView ao leftView / righView e adicionar um ImageView ao UIView, ajustar a origem do ImageView dentro do UIView em qualquer lugar que você quiser, isso funcionou para mim como um encanto. Precisa de apenas algumas linhas de código
fonte
UIViewContentMode
não funciona, mas essa resposta funciona perfeitamente!Isso funciona muito bem para o Swift:
fonte
Isso funciona para mim
Que te ajude.
fonte
Gosto desta solução porque resolve o problema com uma única linha de código
Nota: .. ou 2 se você considerar incluir uma linha QuartzCore :)
fonte
A melhor maneira de fazer isso é simplesmente criar uma classe usando a subclasse de UITextField e no arquivo .m
fazendo isso, vá para seu storyboard ou xib e clique no inspetor de identidade e substitua UITextfield por seu próprio "CustomTextField" na opção de classe.
Nota: Se você simplesmente fornecer preenchimento com layout automático para o campo de texto, seu aplicativo não será executado e mostrará apenas a tela em branco.
fonte
Eu encontrei isso em algum lugar ...
fonte
Em vez de manipular imageView ou image, podemos substituir um método fornecido pela apple para rightView.
e da mesma forma, podemos substituir a função abaixo para visualização à esquerda.
fonte
Swift 5
Você vai querer:
UITextField
UIView
maior do que sua imagemUITextField.rightView
fonte
Aqui está uma solução:
fonte
Crie uma classe UITextField personalizada e use essa classe em vez de UITextField. Substituir - (CGRect) textRectForBounds: (CGRect) limites para definir o retângulo que você precisa
Exemplo
fonte
O exemplo abaixo é para adicionar preenchimento horizontal a uma visão esquerda que passa a ser um ícone - você pode usar uma abordagem semelhante para adicionar preenchimento a qualquer uma
UIView
que gostaria de usar como visão esquerda do campo de texto.UITextField
Subclasse interna :Embora sejamos uma subclasse
UITextField
aqui, acredito que essa seja a abordagem mais limpa.fonte
fonte
UITextField
estiver incorporado em aUISearchBar
, como você instrui oUISearchBar
a usar suaUITextField
subclasse?Obrigado a vocês por suas respostas, para minha surpresa nenhum deles realmente ajustou a imagem de visão certa ao meu campo de texto, embora ainda fornecesse o preenchimento necessário. então pensei em usar o modo AspectFill e milagres aconteceram. para futuros candidatos, aqui está o que usei:
o 35 no quadro do meu imageview representa a altura do meu e-mailTextfield, fique à vontade para ajustá-lo às suas necessidades.
fonte
Eu mesmo tive esse problema e, de longe, a solução mais fácil é modificar sua imagem para simplesmente adicionar preenchimento a cada lado da imagem!
Acabei de alterar minha imagem png para adicionar 10 pixels de preenchimento transparente, e funciona bem, sem codificação alguma!
fonte
Se você estiver usando um UIImageView como leftView, deverá usar este código:
Cuidado: Não use dentro de viewWillAppear ou viewDidAppear
fonte
Eu criei um método personalizado na minha classe ViewController, como mostrado abaixo:
Agora posso chamar esse método dentro de (
viewDidLoad
método) e enviar qualquer um dos meusTextFields
para esse método e adicionar preenchimento para a direita e para a esquerda e fornecer cores de texto e de fundo escrevendo apenas uma linha de código, da seguinte maneira:Funcionou perfeitamente no iOS 7! Espero que isso ainda funcione no iOS 8 e 9 também!
Eu sei que adicionar muitas visualizações pode tornar este objeto um pouco mais pesado para ser carregado. Mas, quando preocupado com a dificuldade em outras soluções, me vi mais inclinado a este método e mais flexível em usar desta forma. ;)
Espero que esta resposta possa ser útil ou útil para descobrir outra solução para outra pessoa.
Felicidades!
fonte
Isso funciona para mim exatamente como estou procurando:
fonte
Desde iOS 13 e Xcode 11, esta é a única solução que funciona para nós.
fonte
// Definir Rightview 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
fonte
Um truque: adicione um UIView contendo UIImageView a UITextField como rightView. Este UIView deve ser maior em tamanho, agora coloque o UIImageView à esquerda dele. Portanto, haverá um preenchimento de espaço da direita.
fonte
A maneira mais fácil é alterar o campo de texto como RoundRect em vez de Custom e ver a mágica. :)
fonte
para Swift2, eu uso
fonte
fonte
Abordagem simples:
Observação: a altura deve ser menor que a largura para permitir o preenchimento horizontal.
fonte
Percebi que este é um post antigo e esta resposta é um pouco específica para o meu caso de uso, mas eu postei no caso de outros estarem procurando uma solução semelhante. Eu quero mover leftView ou rightView de um UITextField, mas não estou colocando imagens neles e não quero nenhuma constante codificada.
Minha interface do usuário pede para ocultar o botão limpar do campo de texto e exibir um UIActivityIndicatorView onde o botão limpar estava localizado.
Eu adiciono um botão giratório ao
rightView
, mas fora da caixa (no iOS 13) ele é deslocado 20 pixels para a direita doclearButton
. Não gosto de usar números mágicos, pois a posição de clearButton e rightView estão sujeitos a alterações a qualquer momento pela Apple. A intenção do design da IU é "giratório onde o botão limpar está", então minha solução foi criar uma subclasse de UITextField e substituirrightViewRect(forBounds)
.Abaixo está um exemplo de trabalho (sans Storyboard):
fonte