Jak ustawić wysokość UITextField?


130

Używam UITextField. Chcę zwiększyć jego wysokość, ale nie znalazłem żadnej właściwości, aby to zrobić. Jak mogę to osiągnąć?

Odpowiedzi:


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

4
znacznie łatwiej jest otworzyć plik .xib jako źródło, znaleźć adres IBUITextField i zmienić właściwość <string key = "NSFrame">
HotJard

Próbowałem tego, ale nic mi to nie dało. Gdzie umieszczasz te linie? Umieściłem to w metodzie initWithNibName.
janex

powinien być widocznyDidLoad lub ViewWillAppear / viewDidApper
Manjunath

2
Domyślna wysokość UITextField to 31, dla każdego, kto dodaje ją programowo i chce, aby miała domyślną wysokość
simon_smiley

3
@HotJard Odradzałbym hakowanie źródła scenorysu, ma tendencję do resetowania niektórych jego wartości. Na przykład, jeśli ustawisz w ten sposób wysokość pola tekstowego i dodasz przycisk do widoku i edytujesz rozmiar tekstu przycisku, pola tekstowe w widoku wrócą do ich domyślnej wysokości.
Kevin,

212

Nie możesz zmienić wysokości stylu zaokrąglonej prostokątnej ramki. Aby ustawić wysokość, po prostu wybierz dowolny styl obramowania inny niż zaokrąglone obramowanie w Xcode:

wprowadź opis obrazu tutaj


Właśnie zmodyfikowałem setCornerRadius z 10.0 (lub dowolnym) i otrzymałeś ponownie UItextField ze stylem obramowania, ale z niestandardową wysokością :)
Beto

1
Lepszym sposobem jest borderStyle = UITextBorderStyleRoundedRect;
Wycofane Darren

Dlaczego nie jest to możliwe?
apex39

151

W końcu znalazłem na to poprawkę!

Jak stwierdziliśmy, IB nie pozwala nam zmienić wysokości stylu krawędzi zaokrąglonych narożników. Więc zmień go na dowolny inny styl i ustaw żądaną wysokość. W kodzie zmień z powrotem styl obramowania.

textField.borderStyle = UITextBorderStyleRoundedRect;

Dobra sztuczka, ale jak możesz pozwolić na prezentację tekstu w wielu wierszach?
Lucien,

7
@Lucien - czy to nie byłoby textarea zamiast textfield
Craig

Podoba mi się to jeszcze bardziej, ponieważ nadal mogę korzystać z projektanta.
RiddlerDev

Upewnij się, że jest to zrobione w środku viewWillLayoutSubviews. Dodałem obraz do pola leftViewtekstowego i trochę tekstu, a kiedy to się stanie viewDidLoad, oba dziwnie się rozciągają.

Do użytku w wersji Swift 3.0textField.borderStyle = .RoundedRect
Geoherna,

86

Jeśli używasz Auto Layout, możesz to zrobić na tablicy Story.

Dodaj ograniczenie wysokości do pola tekstowego, a następnie zmień stałą ograniczenia wysokości na dowolną żądaną wartość. Kroki przedstawiono poniżej:

Krok 1: Utwórz ograniczenie wysokości dla pola tekstowego

wprowadź opis obrazu tutaj

Krok 2: Wybierz wiązanie wysokości

wprowadź opis obrazu tutaj

Krok 3: Zmień stałą wartość ograniczenia wysokości

wprowadź opis obrazu tutaj



Jeśli mówi, że pozycja jest niejednoznaczna, oznacza to, że możesz nie mieć ograniczenia do pozycjonowania obiektu UITextField. Czy możesz spróbować dodać ograniczenie, aby zdefiniować x i y. Przykład, możesz dodać wiodące ograniczenie przestrzenne (dla x) i możesz dodać ograniczenie przestrzeni w pionie od góry.
user1046037

stackoverflow.com/questions/21295136/ ... kiedy to zrobię, dodałem print screen
Esqarrouth

Wskazówka dotycząca znalezienia odpowiedniego ograniczenia wysokości dla używanej czcionki: Ustaw borderStyledowolną wartość oprócz zaokrąglenia. Użyj, Editor -> Size to Fit Contentaby układ robił swoje. Użyj inspektora właściwości na swoim, UITextFieldaby sprawdzić jego wysokość. Użyj tego, aby ustawić ograniczenie wysokości, a teraz możesz zmienić borderStyletył na zaokrąglony.
Benjohn,

Czy mogę to zrobić programowo?
LKM

30

1.) Zmień styl obramowania w InterfaceBuilder.

wprowadź opis obrazu tutaj

2.) Po tym możesz zmienić rozmiar.

wprowadź opis obrazu tutaj

3.) Utwórz IBOutlet do swojego TextField i wprowadź następujący kod do swojego, viewDidLoad()aby zmienić z powrotem BorderStyle.

textField.borderStyle = UITextBorderStyleRoundedRect;

Swift 3:

textField.borderStyle = UITextBorderStyle.roundedRect

Dzięki @David Seek
Vinoth Vino,

29
  1. Wybierz styl obramowania jako nieokrągły

wprowadź opis obrazu tutaj

  1. Ustaw swój wzrost

wprowadź opis obrazu tutaj

w Twoim widoku WillAppear ustaw rogi jako okrągłe

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

wprowadź opis obrazu tutaj

  1. Ciesz się okrągłym i wysokim UITextField

Świetny!! To mi pomogło.
Augustine PA

1
To było świetne, pomogło w szybkim 3/4, którego musiałem użyć, ...... yourTextField.borderStyle = UITextBorderStyle.roundedRect
Tony Merritt

1
Zmienił się na UITextField.BorderStyle.roundedRect
smj

14

Wykonaj te dwa proste kroki, aby zwiększyć wysokość swojego UItextField.

Krok 1: kliknij prawym przyciskiem myszy plik XIB i otwórz go jak w "Kod źródłowy".

Krok 2: Znajdź to samo UITextfieldźródło i ustaw ramkę, jak chcesz.

Możesz użyć tych kroków, aby zmienić ramkę dowolnych kontrolek Apple.


1
Zabawne, ale to najlepszy sposób :)
VisioN

4
To nie jest najlepszy sposób, gdy myślisz o innym programatorze próbującym dowiedzieć się, gdzie jest
ustawiona

1
To brzmi jak okropny pomysł. Powinieneś traktować źródło XIB jako prywatny interfejs API. Może się zmienić spod ciebie w przyszłej wersji Xcode. Nie wspominając o tym, że ukryłeś swoje dostosowanie w ostatnim miejscu, w którym każda rozsądna osoba będzie go szukać w przyszłości.
Michael Peterson

8

Aktualizacja dla iOS 6: przy użyciu automatycznego układu, mimo że nadal nie można ustawić wysokości UITextField za pomocą Inspektora rozmiaru w programie Interface Builder (przynajmniej od Xcode 4.5 DP4), można teraz ustawić ograniczenie wysokości na it, który można edytować w programie Interface Builder.

Ponadto, jeśli ustawiasz wysokość klatki według kodu, automatyczne układanie może ją zresetować w zależności od innych ograniczeń, które może mieć twój widok.


1
To jest to, czego szukam ... ale jak ustawić ograniczenie wysokości, aby dynamicznie zwiększało wysokość na podstawie zawartości 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}} Chcę, aby moje pola tekstowe roundBorder dostosowywały swoją wysokość na podstawie czcionki adaptacyjnej, którą na nich ustawiam. Działa to po wyjęciu z pudełka w systemie iOS 11, ale w ogóle nie działa w systemie iOS 9,10. Używam następującego kodu:
PhoneyDeveloper

6

Wiem, że to stare pytanie, ale chciałem tylko dodać, jeśli chcesz łatwo zmienić wysokość UITextField od wewnątrz IB, a następnie po prostu zmień typ obramowania pola UITextfield na dowolny inny niż domyślny typ zaokrąglonego narożnika. Następnie możesz łatwo rozciągać lub zmieniać atrybuty wysokości z poziomu edytora.


4

swift3

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

Konstruktor interfejsu

  • Wymień UITextFieldsię BigTextField.
  • Zmień Border Style TO none.

To zdecydowanie najlepsze rozwiązanie.
ilovebigmacs

3

Mój żałosny wkład w ten głupi problem. W IB ustaw styl na none, aby można było ustawić wysokość, a następnie w IB ustaw klasę jako podklasę, UITextFieldktóra wymusza zaokrąglenie stylu do prostokąta.

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

Dzięki temu nie musiałem hakować pliku XIB ani pisać kodu stylu do kontrolera widoku.


2

Wysokość UITextField nie jest regulowana w Inspektorze atrybutów tylko wtedy, gdy ma domyślny styl obramowania zaokrąglonych rogów, ale dodaje do niego ograniczenie wysokości (plus wszelkie inne ograniczenia, które są wymagane do spełnienia systemu autoukładu - często po prostu za pomocą Dodaj brakujące ograniczenia) do niego i Dopasowanie wiązania spowoduje dopasowanie wysokości pola tekstowego. Jeśli nie chcesz wiązań, możesz je usunąć (Wyczyść ograniczenia), a pole tekstowe pozostanie na dostosowanej wysokości.

Działa jak marzenie.



1

Spróbuj tego

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

Ostatnie dwa argumenty to szerokość i wysokość, możesz ustawić, jak chcesz ...


1

Możesz użyć właściwości ramki pola tekstowego, aby zmienić ramkę Like-Textfield.frame = CGRECTMake (oś x, oś y, szerokość, wysokość)


1

To całkiem proste.

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

Zadeklaruj swoje pole tekstowe jako właściwość gloabal i zmień jego ramkę, gdziekolwiek chcesz, w swoim kodzie.

Miłego kodowania!


2
To niebezpieczna i przestarzała odpowiedź. Używanie zmiennej globalnej jest okropną praktyką, biorąc pod uwagę, że przetrwa ona widok, a zakodowanie rozmiaru nie będzie dobrze skalowane w przypadku elastycznych układów.
Chris Conover

1

Jeśli tworzysz wiele z UITextFieldsnich, szybsze może być utworzenie podklasy UITextViewi zastąpienie metody setFrame za pomocą

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

W ten sposób możesz po prostu zadzwonić
[customTextField setFrame:<rect>];


0

Miałem ten sam problem. wypróbowałem niektóre rozwiązania tutaj, ale zamiast robić to wszystko mumbo-jumbo. Przekonałem się, że wystarczy ustawić ograniczenie wysokości.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.