Wie stelle ich die UITextField-Höhe ein?


130

Ich benutze eine UITextField. Ich möchte seine Höhe erhöhen, habe aber keine Eigenschaft dafür gefunden. Wie kann ich das erreichen?

Antworten:


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

4
Es ist viel einfacher, .xib als Quelle zu öffnen, um Ihr IBUITextField zu finden und die Eigenschaft <string key = "NSFrame"> zu
ändern

Ich habe das versucht, aber es hat nichts für mich getan. Wo setzen Sie diese Zeilen? Ich habe es in die initWithNibName-Methode eingefügt.
Janex

es sollte in viewDidLoad oder ViewWillAppear / viewDidApper
Manjunath

2
Die Standardhöhe eines UITextField beträgt 31, für alle, die programmgesteuert ein UITextField hinzufügen und eine Standardhöhe
wünschen

2
@HotJard Ich würde empfehlen, das Hacken in der Storyboard-Quelle zu verhindern. Es neigt dazu, einige seiner Werte zurückzusetzen. Wenn Sie beispielsweise die Höhe des Textfelds so einstellen und der Ansicht eine Schaltfläche hinzufügen und die Textgröße der Schaltfläche bearbeiten, springen die Textfelder in der Ansicht auf ihre Standardhöhe zurück.
Kevin

212

Sie können die Höhe des abgerundeten rechten Randstils nicht ändern. Um die Höhe festzulegen, wählen Sie in Xcode einfach einen anderen Rahmenstil als den abgerundeten Rand:

Geben Sie hier die Bildbeschreibung ein


Habe gerade setCornerRadius mit 10.0 (oder einem beliebigen) geändert und du hast wieder UItextField mit Rahmenstil, aber mit benutzerdefinierter Höhe :)
Beto

1
Ein besserer Weg ist borderStyle = UITextBorderStyleRoundedRect;
Veralteter Darren

Warum ist das nicht möglich?
Apex39

151

Ich habe endlich die Lösung dafür gefunden!

Wie wir festgestellt haben, können wir mit IB die Höhe des Randstils mit abgerundeten Ecken nicht ändern. Ändern Sie es also in einen der anderen Stile und stellen Sie die gewünschte Höhe ein. Ändern Sie im Code den Rahmenstil zurück.

textField.borderStyle = UITextBorderStyleRoundedRect;

Guter Trick, aber wie können Sie eine mehrzeilige Darstellung des Textes zulassen?
Lucien

7
@ Lucien - Wäre das nicht eher eine TextArea als ein Textfeld
Craig

Das gefällt mir noch besser, weil ich den Designer noch benutzen kann.
RiddlerDev

Stellen Sie sicher, dass dies im Inneren erfolgt viewWillLayoutSubviews. Ich habe dem leftViewTextfeld und etwas Text ein Bild hinzugefügt , und wenn dies erledigt ist, viewDidLoaddehnen sich beide seltsam.

Für Swift 3.0 verwendentextField.borderStyle = .RoundedRect
Geoherna

85

Wenn Sie das automatische Layout verwenden, können Sie dies auf dem Storyboard tun.

Fügen Sie dem Textfeld eine Höhenbeschränkung hinzu, und ändern Sie dann die Höhenbeschränkungskonstante auf einen beliebigen Wert. Die Schritte sind unten gezeigt:

Schritt 1: Erstellen Sie eine Höhenbeschränkung für das Textfeld

Geben Sie hier die Bildbeschreibung ein

Schritt 2: Wählen Sie Höhenbeschränkung

Geben Sie hier die Bildbeschreibung ein

Schritt 3: Ändern Sie den konstanten Wert der Höhenbeschränkung

Geben Sie hier die Bildbeschreibung ein


Es hat funktioniert, aber ich habe diese neue Warnung erhalten, keine Ideen: Position ist mehrdeutig für "Round Style Text Field"
Esqarrouth

Wenn Position nicht eindeutig ist, bedeutet dies, dass Sie möglicherweise keine Einschränkung zum Positionieren des UITextField-Objekts haben. Können Sie versuchen, eine Einschränkung hinzuzufügen, um x und y zu definieren? Beispiel: Sie könnten eine führende Platzbeschränkung (für x) und eine vertikale Raumbeschränkung von oben hinzufügen.
user1046037

stackoverflow.com/questions/21295136/… als ich das tat, fügte ich einen Druckbildschirm hinzu
Esqarrouth

Ein Tipp zum Ermitteln der richtigen Höhenbeschränkung für die verwendete Schriftart: Stellen Sie borderStylealles außer Rundung ein. Verwenden Sie Editor -> Size to Fit Content, damit das Layout seine Sache macht. Verwenden Sie den Immobilieninspektor auf Ihrem UITextField, um die Höhe zu überprüfen. Verwenden Sie diese Option, um Ihre Höhenbeschränkung einzurichten. Jetzt können Sie den borderStyleRücken in den abgerundeten ändern .
Benjohn

Kann ich es programmatisch machen?
LKM

30

1.) Ändern Sie den Rahmenstil im InterfaceBuilder.

Geben Sie hier die Bildbeschreibung ein

2.) Danach können Sie die Größe ändern.

Geben Sie hier die Bildbeschreibung ein

3.) Erstellen Sie ein IBOutlet für Ihr TextField und geben Sie den folgenden Code ein viewDidLoad(), um den BorderStyle wieder zu ändern.

textField.borderStyle = UITextBorderStyleRoundedRect;

Swift 3:

textField.borderStyle = UITextBorderStyle.roundedRect

Vielen Dank @ David Seek
Vinoth Vino

29
  1. Wählen Sie den Rahmenstil als nicht gerundet

Geben Sie hier die Bildbeschreibung ein

  1. Stellen Sie Ihre Größe ein

Geben Sie hier die Bildbeschreibung ein

In Ihrer Ansicht wird WillAppear die Ecken als rund festlegen

yourUITextField.borderStyle = UITextBorderStyleRoundedRect;

Geben Sie hier die Bildbeschreibung ein

  1. Viel Spaß mit Ihrem runden und großen UITextField

Toll!! Es hat mir geholfen.
Augustine PA

1
Das war großartig, es half für schnelles 3/4, das ich verwenden musste, ...... yourTextField.borderStyle = UITextBorderStyle.roundedRect
Tony Merritt

1
Es änderte sich zu UITextField.BorderStyle.roundedRect
smj

14

Befolgen Sie diese beiden einfachen Schritte und erhöhen Sie Ihre Körpergröße UItextField .

Schritt 1: Klicken Sie mit der rechten Maustaste auf die XIB-Datei und öffnen Sie sie wie unter "Quellcode".

Schritt 2: Finden Sie das gleicheUITextfield Quelle und stellen Sie den gewünschten Rahmen ein.

Mit diesen Schritten können Sie den Rahmen aller Apple-Steuerelemente ändern.


1
Witzig, aber das ist der beste Weg :)
VisioN

4
Dies ist nicht der beste Weg, wenn Sie an andere Programmierer denken, die versuchen herauszufinden, wo die Höhe eingestellt ist
bucherland

1
Das klingt nach einer schrecklichen Idee. Sie sollten die XIB-Quelle als private API betrachten. Es kann sich in einer zukünftigen Version von Xcode unter Ihnen ändern. Ganz zu schweigen davon, dass Sie Ihre Anpassung an letzter Stelle versteckt haben, nach der jede vernünftige Person in Zukunft suchen wird.
Michael Peterson

8

Ein Update für iOS 6: Mithilfe des automatischen Layouts können Sie jetzt eine Höhenbeschränkung festlegen, obwohl Sie die Höhe des UITextField im Größeninspektor im Interface Builder nicht festlegen können (mindestens ab Xcode 4.5 DP4) es, das Sie im Interface Builder bearbeiten können.

Wenn Sie die Höhe des Rahmens per Code festlegen, wird sie möglicherweise durch das automatische Layout zurückgesetzt, abhängig von den anderen Einschränkungen, die Ihre Ansicht möglicherweise hat.


1
Dies ist, wonach ich suche ... aber wie stelle ich die Höhenbeschränkung so ein, dass die Höhe basierend auf dem Inhalt des UITextField dynamisch erweitert wird?
Jbandi

func updateTextFields () {falls #verfügbar (iOS 11, *) {} else {nameTextField.borderStyle = .line nameTextFieldHeight.constant = nameTextField.sizeThatFits (CGSize (Breite: 1000, Höhe: 500)). height nameTextField.borderStyle =. roundRect}} Ich möchte, dass meine roundBorder-Textfelder ihre Höhe basierend auf der adaptiven Schriftart anpassen, die ich für sie einstelle. Dies funktioniert unter iOS 11 sofort, unter iOS 9,10 jedoch überhaupt nicht. Ich benutze den folgenden Code:
PhoneyDeveloper

6

Ich weiß, dass dies eine alte Frage ist, aber ich wollte nur hinzufügen, ob Sie die Höhe eines UITextFields innerhalb von IB einfach ändern möchten, und dann einfach den Randtyp dieses UITextfields in einen anderen als den Standardtyp für abgerundete Ecken ändern möchten. Dann können Sie Höhenattribute einfach aus dem Editor heraus strecken oder ändern.


4

swift3

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

Interface Builder

  • Ersetzen UITextFielddurchBigTextField .
  • Ändern Sie das Border Style in none.

Dies ist bei weitem die beste Lösung.
Ilovebigmacs

3

Mein erbärmlicher Beitrag zu diesem dummen Problem. Setzen Sie in IB den Stil auf none, damit Sie die Höhe festlegen können, und setzen Sie in IB die Klasse auf eine Unterklasse UITextField, die erzwingt, dass der Stil gerade gerundet wird.

@interface JLTForcedRoundedRectTextField : UITextField
@end

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

Es hat mich davon abgehalten, die XIB-Datei zu hacken oder Stilcode in meinen View Controller zu schreiben.


3

In Swift 3 verwenden Sie:

yourTextField.frame.size.height = 30

2

Die Höhe eines UITextFields kann im Attributinspektor nicht nur angepasst werden, wenn es den Standardrahmenstil für abgerundete Ecken aufweist, sondern es wird eine Höhenbeschränkung (plus alle anderen Einschränkungen, die erforderlich sind, um das Autolayout-System zu erfüllen - häufig durch einfaches Hinzufügen fehlender Einschränkungen hinzufügen) und hinzugefügt Durch Anpassen der Einschränkung wird die Höhe des Textfelds angepasst. Wenn Sie keine Einschränkungen wünschen, können die Einschränkungen entfernt werden (Einschränkungen löschen) und das Textfeld bleibt auf der angepassten Höhe.

Klappt wunderbar.


1

Versuche dies

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

Die letzten beiden Argumente sind Breite und Höhe. Sie können einstellen, wie Sie möchten ...


1

Sie können die Rahmeneigenschaft des Textfelds verwenden, um den Rahmen zu ändern. Like-Textfield.frame = CGRECTMake (x-Achse, y-Achse, Breite, Höhe)


1

Das ist ganz einfach.

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

Deklarieren Sie Ihr Textfeld als gloabale Eigenschaft und ändern Sie den Rahmen, wo immer Sie dies in Ihrem Code tun möchten.

Viel Spaß beim Codieren!


2
Dies ist eine gefährliche und veraltete Antwort. Die Verwendung einer globalen Variablen ist eine schreckliche Praxis, da sie die Ansicht überlebt und die Hardcodierung einer Größe mit flexiblen Layouts nicht gut skaliert.
Chris Conover

1

Wenn Sie viel UITextFieldsdavon erstellen, können Sie schneller Unterklassen UITextViews erstellen und die setFrame-Methode mit überschreiben

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

Auf diese Weise können Sie einfach anrufen
[customTextField setFrame:<rect>];


0

Ich hatte das gleiche Problem. Ich habe einige der Lösungen hier ausprobiert, aber anstatt all dieses Hokuspokus zu machen. Ich fand, dass es ausreicht, nur die Höhenbeschränkung festzulegen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.