2014-12-31 18 views
6

Come posso impostare il ridimensionamento automatico nel campo di testo in iOS?iOS UITextField Ridimensionamento automatico conforme al contenuto

helloWorld.m

self.TextFieldExample.text = @"HELLO WORLD HELLO WORLD HELLO WORLD HELLO WORLD";

Ora:

CIAO MONDO CIAO ...

corretta:

CIAO MONDO CIAO W ORLD HELLO WORLD HELLO WORLD

Qual è la migliore pratica in questo caso?

+1

Intendi qualcosa di simile a ciò che è stato risposto in questo post? http://stackoverflow.com/questions/50467/how-do-i-size-a-uitextview-to-its-content – user1390486

+0

Non chiaro. Vuoi che il campo di testo usi un carattere più piccolo per adattarlo al testo all'interno della sua larghezza o vuoi che il campo di testo sia più ampio per adattarsi al suo testo? – rmaddy

+0

user1390486 questo post funziona, ma non completamente ... il ridimensionamento del campo di testo è solo in una riga. –

risposta

2

Con un UITextField, testo deve stare su una sola riga e non può avvolgere .

si hanno due opzioni:

  1. ridurre il tipo di carattere per stare su una sola riga:

    self.TextFieldExample.adjustsFontSizeToFitWidth = YES; self.TextFieldExample.minimumFontSize = 10.0; //Optionally specify min size

  2. Usa UITextView per consentire la disposizione del testo:

    Vai a questa risposta: How to create a multiline UITextfield?

P.S. Per the style guide, "Proprietà dovrebbe essere cammello caso del leader parola essendo minuscola." Così si dovrebbe rinominare la var di self.textFieldExample

+0

BFar grazie per la tua risposta il punto 2 è il modo, ma lo sai ... Come è possibile incrementare l'altezza in base alla quantità di testo automaticamente ?? –

+0

dopo che il campo di testo ha perso lo stato attivo e prova a modificarlo di nuovo, la dimensione verrà impostata sulla dimensione minima = 10 sfortunatamente questa soluzione non funziona con me :( –

7

Si dovrebbe aggiungere un'azione eseguita dal textField di tipo Editing Changed e dentro questa azione si dovrebbe aggiungere [self.textField sizeToFit]; come questo:

- (IBAction)textChanged:(UITextField *)sender { 

    [self.textField sizeToFit]; 
} 

In questo modo ogni volta che il contenuto del campo di testo cambiato eseguirà il azione e verrà ridimensionato alla lunghezza del testo.

E se si desidera che il testo per ridimensionare in base alla larghezza della vostra textField, è possibile farlo nel attributi ispettore della storyboard: http://i.stack.imgur.com/udVlk.png

+1

La domanda riguarda un campo di testo, non un'etichetta. – rmaddy

+1

Ho aggiornato la mia risposta! @rmaddy –

+0

grazie per la tua risposta Santiago Fabregat, ma l'idea è implementare multilinea, come UITextView, penso sia la migliore soluzione in questo caso –

0

Swift:

self.TextFieldExample.adjustsFontSizeToFitWidth = true 
self.TextFieldExample.minimumFontSize = 10.0 
0

Nel mio caso ho voluto il carattere per essere di Le stesse dimensioni. Ho impostato textField width constraint su> = 10 e funziona perfettamente su iOS 9, 10, 11.

Per iOS 11 questo funziona anche durante la modifica del testo.

Per eseguire questa operazione durante la modifica del testo su iOS 9 e 10, ho gestito un altro metodo registrando un evento textDidChange.

//Swift 3 Sample 

//In viewDidLoad 
adjustableTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged) 


@objc func textFieldDidChange(_ textField: UITextField) { 
    adjustableTextField.resignFirstResponder() 
    adjustableTextField.becomeFirstResponder() 
} 
Problemi correlati