Die Ansichten leftView und rightView eines UITextField unter iOS7 befinden sich sehr nahe am Textfeldrand.
Wie kann ich diesen Elementen eine (horizontale) Polsterung hinzufügen?
Ich habe versucht, den Rahmen zu ändern, aber es hat nicht funktioniert
uint padding = 10;//padding for iOS7
UIImageView * iconImageView = [[UIImageView alloc] initWithImage:iconImage];
iconImageView.frame = CGRectMake(0 + padding, 0, 16, 16);
textField.leftView = iconImageView;
Bitte beachten Sie, dass ich nicht daran interessiert bin, dem Text des Textfelds eine Auffüllung hinzuzufügen, wie z. B. Auffüllen für UITextField mit UITextBorderStyleNone festlegen
ios
objective-c
uitextfield
unter Null
quelle
quelle
Antworten:
Ich habe gerade selbst daran gearbeitet und diese Lösung verwendet:
Dadurch wird das Bild um 10 von rechts verschoben, anstatt dass das Bild in iOS 7 gegen den Rand gedrückt wird.
Darüber hinaus gehörte dies zu einer Unterklasse von
UITextField
, die erstellt werden kann durch:UITextField
anstelle der Standarddatei istNSObject
Fügen Sie eine neue Methode mit dem Namen hinzu
- (id)initWithCoder:(NSCoder*)coder
, um das Bild festzulegenMöglicherweise müssen Sie importieren
#import <QuartzCore/QuartzCore.h>
Fügen Sie die
rightViewRectForBounds
obige Methode hinzuKlicken Sie im Interface Builder auf das TextField, das Sie unterklassifizieren möchten, und ändern Sie das Klassenattribut in den Namen dieser neuen Unterklasse
quelle
Eine viel einfachere Lösung, die Folgendes nutzt
contentMode
:In Swift 3
quelle
Am einfachsten ist es, eine UIView zu leftView / righView hinzuzufügen und eine ImageView zu UIView hinzuzufügen. Passen Sie den Ursprung von ImageView in UIView an einer beliebigen Stelle an. Dies hat bei mir wie ein Zauber funktioniert. Es werden nur wenige Codezeilen benötigt
quelle
UIViewContentMode
funktioniert nicht, aber diese Antwort funktioniert wie ein Zauber!Dies funktioniert hervorragend für Swift:
quelle
Das funktioniert bei mir
Möge es dir helfen.
quelle
Ich mag diese Lösung, weil sie das Problem mit einer einzigen Codezeile löst
Hinweis: .. oder 2, wenn Sie QuartzCore als Zeile einfügen möchten :)
quelle
Der beste Weg, dies zu tun, besteht darin, einfach eine Klasse mit der Unterklasse von UITextField und in der .m-Datei zu erstellen
Gehen Sie dazu zu Ihrem Storyboard oder xib, klicken Sie auf Identitätsinspektor und ersetzen Sie UITextfield durch Ihre eigene Option "CustomTextField" in der Klasse.
Hinweis: Wenn Sie einfach ein Auffüllen mit automatischem Layout für das Textfeld angeben, wird Ihre Anwendung nicht ausgeführt und zeigt nur einen leeren Bildschirm an.
quelle
Ich habe das irgendwo gefunden ...
quelle
Anstatt imageView oder image zu manipulieren, können wir eine von Apple für rightView bereitgestellte Methode überschreiben.
und auf die gleiche Weise können wir unter func für die linke Ansicht überschreiben.
quelle
Swift 5
Du wirst wollen:
UITextField
UIView
Bild , das größer als Ihr Bild istUITextField.rightView
quelle
Hier ist eine Lösung:
quelle
Erstellen Sie eine benutzerdefinierte UITextField-Klasse und verwenden Sie diese Klasse anstelle von UITextField. Override - (CGRect) textRectForBounds: (CGRect) Grenzen, um das benötigte Rect festzulegen
Beispiel
quelle
Das folgende Beispiel dient zum Hinzufügen eines horizontalen Auffüllens zu einer linken Ansicht, die zufällig ein Symbol ist. Sie können den ähnlichen Ansatz zum Hinzufügen eines Auffüllens zu einer beliebigen
UIView
Ansicht verwenden, die Sie als linke Ansicht des Textfelds verwenden möchten.Innerhalb der
UITextField
Unterklasse:Obwohl wir hier eine Unterklasse
UITextField
sind, glaube ich, dass dies der sauberste Ansatz ist.quelle
quelle
UITextField
in a eingebettet istUISearchBar
, wie weisen Sie dasUISearchBar
an, IhreUITextField
Unterklasse zu verwenden?Vielen Dank für Ihre Antworten. Zu meiner Überraschung passte keiner von ihnen wirklich das richtige Ansichtsbild in mein Textfeld und lieferte dennoch die erforderliche Polsterung. Dann dachte ich daran, den AspectFill-Modus zu verwenden, und es geschahen Wunder. Für zukünftige Suchende habe ich Folgendes verwendet:
Die 35 im Rahmen meiner Bildansicht repräsentiert die Höhe meines E-Mail-Textfelds. Sie können es jederzeit an Ihre Bedürfnisse anpassen.
quelle
Ich habe dieses Problem selbst gehabt, und die bei weitem einfachste Lösung besteht darin, Ihr Bild so zu ändern, dass jeder Seite des Bildes einfach eine Auffüllung hinzugefügt wird!
Ich habe gerade mein PNG-Bild geändert, um 10 Pixel transparenten Abstand hinzuzufügen, und es funktioniert gut, ohne Codierung!
quelle
Wenn Sie eine UIImageView als leftView verwenden, müssen Sie diesen Code verwenden:
Achtung: Verwenden Sie nicht inside viewWillAppear oder viewDidAppear
quelle
Ich habe in meiner ViewController-Klasse eine benutzerdefinierte Methode erstellt, wie unten gezeigt:
Jetzt kann ich diese Methode in (
viewDidLoad
Methode) aufrufen und eine meinerTextFields
Methoden an diese Methode senden und sowohl rechts als auch links Auffüllungen hinzufügen sowie Text- und Hintergrundfarben angeben, indem ich nur eine Codezeile wie folgt schreibe:Dies funktionierte perfekt unter iOS 7! Hoffe das funktioniert auch unter iOS 8 und 9 noch!
Ich weiß, dass das Hinzufügen zu vieler Ansichten das Laden eines etwas schwereren Objekts erschwert. Als ich mir jedoch Sorgen über die Schwierigkeiten bei anderen Lösungen machte, war ich voreingenommener gegenüber dieser Methode und flexibler bei der Verwendung dieser Methode. ;)
Hoffe, diese Antwort könnte hilfreich oder nützlich sein, um eine andere Lösung für jemand anderen zu finden.
Prost!
quelle
Das funktioniert bei mir genauso wie ich es suche:
quelle
Seit iOS 13 und Xcode 11 ist dies die einzige Lösung, die für uns funktioniert.
quelle
// Setze die rechte Ansicht von UITextField, schnell 4.2
TxtPass.rightViewMode = UITextField.ViewMode.always let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 18, height: 18)) imageView.contentMode = UIView.ContentMode.scaleAspectFit let image = UIImage(named: "hidepass") imageView.image = image let rightView = UIView(frame: CGRect(x: 0, y: 0, width: 28, height: 18)) rightView.addSubview(imageView) rightView.contentMode = UIView.ContentMode.left TxtPass.rightView = rightView
quelle
Ein Trick: Fügen Sie UITextField eine UIView mit UIImageView als rightView hinzu. Diese UIView muss größer sein. Platzieren Sie nun die UIImageView links davon. Es wird also eine Polsterung des Raums von rechts geben.
quelle
Am einfachsten ist es, das Textfeld als RoundRect anstelle von Custom zu ändern und die Magie zu sehen. :) :)
quelle
für Swift2 benutze ich
quelle
quelle
Einfacher Ansatz:
Hinweis: Die Höhe sollte kleiner als die Breite sein, um eine horizontale Polsterung zu ermöglichen.
quelle
Mir ist klar, dass dies ein alter Beitrag ist und diese Antwort etwas spezifisch für meinen Anwendungsfall ist, aber ich habe sie veröffentlicht, falls andere nach einer ähnlichen Lösung suchen. Ich möchte die leftView oder rightView eines UITextField verschieben, aber ich füge keine Bilder in sie ein und möchte keine fest codierten Konstanten.
In meiner Benutzeroberfläche muss die Schaltfläche zum Löschen des Textfelds ausgeblendet und eine UIActivityIndicatorView angezeigt werden, in der sich die Schaltfläche zum Löschen befand.
Ich füge dem einen Spinner hinzu
rightView
, aber nach dem Auspacken (unter iOS 13) wird er um 20 Pixel nach rechts verschobenclearButton
. Ich verwende keine magischen Zahlen, da sich die Position von clearButton und rightView von Apple jederzeit ändern kann. Die Absicht des UI-Designs ist "Spinner, wo sich die Schaltfläche zum Löschen befindet". Meine Lösung bestand also darin, UITextField zu unterklassifizieren und zu überschreibenrightViewRect(forBounds)
.Unten finden Sie ein Arbeitsbeispiel (ohne Storyboard):
quelle