Como definir a altura do UITextField?

130

Eu estou usando um UITextField. Quero aumentar sua altura, mas não encontrei nenhuma propriedade para fazer isso. Como posso conseguir isso?

Uma corrida
fonte

Respostas:

83
CGRect frameRect = textField.frame;
frameRect.size.height = 100; // <-- Specify the height you want here.
textField.frame = frameRect;
Manjunath
fonte
4
é muito mais fácil abrir o .xib, pois a fonte encontra seu IBUITextField e altera a propriedade <string key = "NSFrame">
HotJard
Eu tentei isso, mas não fez nada para mim. Onde você coloca essas linhas? Eu o coloquei no método initWithNibName.
janex
ele deve estar em viewDidLoad ou viewWillAppear / viewDidApper
Manjunath
2
A altura padrão de um UITextField é 31, para qualquer um adicionando um programaticamente e querendo uma altura padrão
simon_smiley
2
@ HotJard Eu recomendaria contra hackers na fonte do storyboard, ele tende a redefinir alguns de seus valores. Por exemplo, quando você define a altura do campo de texto dessa forma e adiciona um botão à visualização e edita o tamanho do texto do botão, os campos de texto na visualização retornam à sua altura padrão.
Kevin
212

Você não pode alterar a altura do estilo da borda retângulo arredondado. Para definir a altura, basta escolher qualquer estilo de borda diferente da borda arredondada no Xcode:

insira a descrição da imagem aqui

Brian
fonte
Apenas modifiquei setCornerRadius com 10.0 (ou qualquer) e você obteve novamente UItextField com estilo de borda, mas com altura personalizada :) #
Beto
1
Uma maneira melhor é borderStyle = UITextBorderStyleRoundedRect;
Descontinuado Darren,
Por que isso não é possível?
Apex39 6/03/19
151

Finalmente encontrei a correção para isso!

Como descobrimos, o IB não nos permite alterar a altura do estilo da borda do canto arredondado. Então mude para qualquer um dos outros estilos e defina a altura desejada. No código, altere o estilo da borda de volta.

textField.borderStyle = UITextBorderStyleRoundedRect;
nathanbroyles
fonte
Bom truque, mas como você pode permitir a apresentação de várias linhas do texto?
Lucien
7
@Lucien - que não iria ser um TextArea em vez de um campo de texto
Craig
Gosto disso ainda mais porque ainda posso usar o designer.
RiddlerDev
Certifique-se de que isso seja feito dentro viewWillLayoutSubviews. Adicionei uma imagem ao campo leftViewde texto e a algum texto e, quando isso é feito, viewDidLoados dois se esticam estranhamente.
Para uso do Swift 3.0textField.borderStyle = .RoundedRect
Geoherna
85

Se você estiver usando o Layout automático, poderá fazê-lo no Storyboard.

Adicione uma restrição de altura ao campo de texto e altere a constante da restrição de altura para qualquer valor desejado. Os passos são mostrados abaixo:

Etapa 1: criar uma restrição de altura para o campo de texto

insira a descrição da imagem aqui

Etapa 2: Selecionar restrição de altura

insira a descrição da imagem aqui

Etapa 3: Alterar o valor constante da restrição de altura

insira a descrição da imagem aqui

user1046037
fonte
Funcionou, mas eu tenho este novo aviso, todas as idéias: Posição é ambígua para "Round Estilo Campo de texto"
Esqarrouth
Se a posição for ambígua, significa que você pode não ter uma restrição para posicionar o objeto UITextField. Você pode tentar adicionar uma restrição para definir x e y. Exemplo: você pode adicionar uma restrição de espaço inicial (para x) e uma restrição de espaço vertical a partir do topo.
user1046037
stackoverflow.com/questions/21295136/... quando eu faço que eu adicionei um print screen
Esqarrouth
Uma dica para encontrar a restrição de altura correta para a fonte que você está usando: Defina borderStylecomo qualquer coisa, exceto arredondado. Use Editor -> Size to Fit Contentpara fazer o layout funcionar. Use o inspetor de propriedades no seu UITextFieldpara verificar sua altura. Use isso para configurar sua restrição de altura e agora você pode alterar a borderStylevolta para a arredondada.
Benjohn
Posso fazer programaticamente?
LKM
30

1.) Altere o estilo da borda no InterfaceBuilder.

insira a descrição da imagem aqui

2.) Depois disso, você poderá alterar o tamanho.

insira a descrição da imagem aqui

3.) Crie um IBOutlet para o seu TextField e digite o código a seguir viewDidLoad()para alterar o BorderStyle de volta.

textField.borderStyle = UITextBorderStyleRoundedRect;

Swift 3:

textField.borderStyle = UITextBorderStyle.roundedRect
David Seek
fonte
Obrigado
@David
29
  1. Escolha o estilo da borda como não arredondado

insira a descrição da imagem aqui

  1. Defina sua altura

insira a descrição da imagem aqui

Em sua opinião, o AppApp irá definir os cantos como redondos

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

insira a descrição da imagem aqui

  1. Aproveite o seu UITextField redondo e alto
Darren preterido
fonte
Ótimo!! Isso me ajudou.
Augustine PA
1
Isso foi ótimo, ele ajudou para SWIFT 3/4 eu tive que usar, ...... yourTextField.borderStyle = UITextBorderStyle.roundedRect
Tony Merritt
1
Foi alterado para UITextField.BorderStyle.roundedRect
smj
14

Siga estes dois passos simples e obtenha um aumento de altura do seu UItextField.

Etapa 1: clique com o botão direito do mouse no arquivo XIB e abra-o como em "Código-fonte".

Etapa 2: encontre a mesma UITextfieldfonte e defina o quadro desejado.

Você pode seguir estas etapas para alterar o quadro de qualquer controle da apple.

Sunil Targe
fonte
1
Engraçado, mas esta é a melhor maneira :)
Visão
4
Esta não é a melhor maneira quando você pensa sobre outro programador tentando descobrir onde a altura é setado
bucherland
1
Parece uma péssima ideia. Você deve considerar a fonte XIB como uma API particular. Pode mudar de você na versão futura do Xcode. Sem mencionar que você ocultou sua personalização em último lugar, qualquer pessoa sã procurará por ela no futuro.
Michael Peterson
8

Uma atualização para o iOS 6: usando o layout automático, mesmo que você ainda não possa definir a altura do UITextField no Size Inspector no Interface Builder (a partir do Xcode 4.5 DP4), agora é possível definir uma restrição de Altura no , que você pode editar no Interface Builder.

Além disso, se você estiver definindo a altura do quadro por código, o layout automático poderá redefini-lo, dependendo das outras restrições que sua exibição possa ter.

Guillaume Laurent
fonte
1
É isso que estou procurando ... mas como defino a restrição de altura para expandir a altura dinamicamente com base no conteúdo do UITextField?
jbandi
func updateTextFields () {se # disponível (iOS 11, *) {} else {nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits (CGSize (largura: 1000, altura: 500)). height nameTextField.borderStyle =. roundedRect}} Desejo que meus textFields roundBorder ajustem sua altura com base na fonte adaptável que estou definindo neles. Isso funciona imediatamente no iOS 11, mas não funciona no iOS 9,10. Eu uso o seguinte código:
PhoneyDeveloper
6

Eu sei que essa é uma pergunta antiga, mas eu gostaria de adicionar se você deseja alterar facilmente a altura de um UITextField do IB, basta alterar o tipo de borda do UITextfield para algo diferente do tipo de canto arredondado padrão. Em seguida, você pode esticar ou alterar os atributos de altura facilmente de dentro do editor.

Mark McCorkle
fonte
4

swift3

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

Construtor de interface

  • Substitua UITextFieldpor BigTextField.
  • Mude Border Style para none.
neoneye
fonte
Esta é de longe a melhor solução.
precisa saber é o seguinte
3

Minha contribuição patética para esse problema idiota. No IB, defina o estilo como none, para que você possa definir a altura; em IB, defina a classe como uma subclasse UITextFieldque força o estilo a ser arredondado como ret.

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

Isso me impediu de ter que invadir o arquivo XIB ou escrever o código de estilo no meu controlador de exibição.

Jeffery Thomas
fonte
3

No Swift 3, use:

yourTextField.frame.size.height = 30
Kaptain
fonte
2

A altura de um UITextField não é ajustável no Attributes Inspector apenas quando ele possui o estilo de borda de cantos arredondados padrão, mas adiciona uma restrição de altura (mais quaisquer outras restrições necessárias para satisfazer o sistema de execução automática - geralmente usando Add Missing Constraints) e o ajuste da restrição ajustará a altura do campo de texto. Se você não deseja restrições, as restrições podem ser removidas (Limpar restrições) e o campo de texto permanecerá na altura ajustada.

Funciona como um encanto.

Simon.
fonte
1

tente isso

UITextField *field = [[UITextField alloc] initWithFrame:CGRectMake(20, 80, 280, 120)];
Tendulkar
fonte
1
UITextField *txt = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    [txt setText:@"Ananth"];
    [self.view addSubview:txt];

Os últimos dois argumentos são largura e altura. Você pode definir como quiser ...

Usuário-1070892
fonte
1

Você pode usar a propriedade frame do campo de texto para alterar o quadro Like-Textfield.frame = CGRECTMake (eixo x, eixo y, largura, altura)

Harshit_Jobs
fonte
1

Isto é bem simples.

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

Declare seu campo de texto como uma propriedade gloabal e altere seu quadro sempre que desejar fazê-lo em seu código.

Feliz codificação!

Vignesh
fonte
2
Esta é uma resposta perigosa e obsoleta. O uso de uma variável global é uma prática terrível, considerando que ela sobreviverá à visão e que o tamanho do código não será dimensionado bem com layouts flexíveis.
precisa
1

Se você estiver criando muito UITextFields, pode ser mais rápido subclass se UITextViewsubstituir o método setFrame por

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

Dessa forma, você pode simplesmente ligar
[customTextField setFrame:<rect>];

mylogon
fonte
0

Eu estava tendo o mesmo problema. tentei algumas das soluções aqui, mas em vez de fazer tudo isso mumbo-jumbo. Achei que apenas definir a restrição de altura é suficiente.

Alix
fonte