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?

Arun
quelle

Antworten:

83
CGRect frameRect = textField.frame;
frameRect.size.height = 100; // <-- Specify the height you want here.
textField.frame = frameRect;
Manjunath
quelle
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

Brian
quelle
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;
Nathanbroyles
quelle
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

user1046037
quelle
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
David Seek
quelle
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
Veralteter Darren
quelle
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.

Sunil Targe
quelle
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.

Guillaume Laurent
quelle
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.

Mark McCorkle
quelle
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.
neoneye
quelle
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.

Jeffery Thomas
quelle
3

In Swift 3 verwenden Sie:

yourTextField.frame.size.height = 30
Kaptain
quelle
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.

Simon.
quelle
1

Versuche dies

UITextField *field = [[UITextField alloc] initWithFrame:CGRectMake(20, 80, 280, 120)];
Tendulkar
quelle
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 ...

User-1070892
quelle
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)

Harshit_Jobs
quelle
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!

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

mylogon
quelle
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.

Alix
quelle