419 Stimmen

Padding für UITextField mit UITextBorderStyleNone festlegen

Ich wollte einen benutzerdefinierten Hintergrund für meine UITextFields . Das funktioniert gut, bis auf die Tatsache, dass ich die UITextBorderStyleNone damit es schön aussieht. Dadurch wird der Text gezwungen, ohne Polsterung auf der linken Seite zu bleiben.

Kann ich eine Polsterung manuell einstellen, so dass sie ähnlich aussieht wie UITextBorderStyleRoundedRect außer der Verwendung meines benutzerdefinierten Hintergrundbildes?

5voto

DrPatience Punkte 1626

So erreichen Sie dies in SWIFT

@IBOutlet weak var yourTextField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()
let paddingView = UIView(frame: CGRectMake(0, 0, 10, self.yourTextField.frame.height))
yourTextField.leftView = paddingView
yourTextField.leftViewMode = UITextFieldViewMode.Always
}
}

Ressource

5voto

Bhavin_m Punkte 2700

Falls jemand auf der Suche ist nach Swift 4.0 Version dann unten extension ist Arbeit. Sie hat beides Left y Right Polsterung für UITextField . Eigentlich ist es IBInspectable für die Konfiguration des Storyboards. Sie können den Wert direkt aus dem Interface Builder / Storyboard einstellen. Dies ist getesteter Code in Swift 4.0 Version und Xcode 9.0

Beachten Sie, dass Sie, wenn Sie die Clear Button auf demselben UITextField dann müssen Sie Right Padding leer lassen.

import UIKit

extension UITextField {

    @IBInspectable var paddingLeft: CGFloat {
        get {
            return leftView!.frame.size.width
        }
        set {
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
            leftView = paddingView
            leftViewMode = .always
        }
    }

    @IBInspectable var paddingRight: CGFloat {
        get {
            return rightView!.frame.size.width
        }
        set {
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
            rightView = paddingView
            rightViewMode = .always     
        }
    }
}

5voto

Phil Punkte 4321

Swift 2.0 Version:

let paddingView: UIView = UIView(frame: CGRectMake(0, 0, 5, 20))
textField.leftView = paddingView
textField.leftViewMode = UITextFieldViewMode.Always;

4voto

woody121 Punkte 358

^ diese Vorschläge eignen sich hervorragend für diejenigen, die eine Schnittstelle programmatisch erstellen.

Aber es gibt zwei LAZY EASY WAYS für diejenigen von uns, die den Xcode Interface Builder verwenden:

  • einfacher: eine UIImageView hinter ein Textfeld setzen

  • Am einfachsten: Ändern Sie den Rahmenstil in ein einfaches schwarzes Quadrat (zweite Option von links) und fügen Sie dann Ihr Bild als Hintergrundbild ein. Das Bild hat Vorrang vor dem Quadrat, so dass Sie immer noch die für einen normalen Bildhintergrund erforderliche Polsterung erhalten, ohne dass das Quadrat tatsächlich aufgezeichnet wird.

EDIT: Sie können auch die schwarze Kugel (dritte von links Option bei der Auswahl der UITextBox in IB), es funktioniert nicht mit dem ganz rechts, "grafische Kugel" Stil.

3voto

Anuj Kumar Rai Punkte 666

Der beste Weg, dies zu tun ist einfach eine Klasse mit Unterklasse von UITextField und in .m-Datei

 #import "CustomTextField.h"
 #import <QuartzCore/QuartzCore.h>
 @implementation CustomTextField

- (id)initWithCoder:(NSCoder*)coder 
 {
  self = [super initWithCoder:coder];

  if (self) {

//self.clipsToBounds = YES;
//[self setRightViewMode:UITextFieldViewModeUnlessEditing];

self.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,15,46)];
self.leftViewMode=UITextFieldViewModeAlways;
   }

  return self;

 }

indem Sie dies tun gehen Sie zu Ihrem Storyboard oder xib und klicken Sie auf Identität Inspektor und ersetzen UITextfield mit Ihrem eigenen "CustomTextField" in Klasse Option.

Hinweis: Wenn Sie einfach Padding mit Auto-Layout für das Textfeld angeben, wird Ihre Anwendung nicht laufen und nur einen leeren Bildschirm anzeigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X