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?

25voto

Camsoft Punkte 11170

Unterklassifizieren Sie einfach UITextField wie folgt:

@implementation DFTextField

- (CGRect)textRectForBounds:(CGRect)bounds
{
    return CGRectInset(bounds, 10.0f, 0);
}

- (CGRect)editingRectForBounds:(CGRect)bounds
{
    return [self textRectForBounds:bounds];
}

@end

Dadurch wird eine horizontale Auffüllung von 10 Punkten auf jeder Seite hinzugefügt.

23voto

777Q Punkte 379
  1. Erstellen Sie ein Textfeld Benutzerdefiniert

PaddingTextField.swift

import UIKit
class PaddingTextField: UITextField {

@IBInspectable var paddingLeft: CGFloat = 0
@IBInspectable var paddingRight: CGFloat = 0

override func textRectForBounds(bounds: CGRect) -> CGRect {
    return CGRectMake(bounds.origin.x + paddingLeft, bounds.origin.y,
        bounds.size.width - paddingLeft - paddingRight, bounds.size.height);
}

override func editingRectForBounds(bounds: CGRect) -> CGRect {
    return textRectForBounds(bounds)
}}
  1. Legen Sie Ihre Textfeld-Klasse PaddingTextField und benutzerdefinierte Ihre Auffüllung, wie Sie wollen enter image description here enter image description here

  2. Genießen Sie es

final

21voto

Kirit Vaghela Punkte 12413

Objektiver C-Code

MyTextField.h

#import <UIKit/UIKit.h>

@interface MyTextField : UITextField

@property (nonatomic) IBInspectable CGFloat padding;

@end

MyTextField.m

#import "MyTextField.h"

IB_DESIGNABLE
@implementation MyTextField

@synthesize padding;

-(CGRect)textRectForBounds:(CGRect)bounds{
    return CGRectInset(bounds, padding, padding);
}

-(CGRect)editingRectForBounds:(CGRect)bounds{
    return [self textRectForBounds:bounds];
}

@end

enter image description here

18voto

Ausgehend von der Antwort von Evil Trout sollten Sie eine Kategorie erstellen, um die Verwendung in verschiedenen Anwendungen zu erleichtern.

Header-Datei:

@interface UITextField (PaddingText)

-(void) setLeftPadding:(int) paddingValue;

-(void) setRightPadding:(int) paddingValue;
@end

Implementierungsdatei:

#import "UITextField+PaddingText.h"

@implementation UITextField (PaddingText)

-(void) setLeftPadding:(int) paddingValue
{
    UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, paddingValue, self.frame.size.height)];
    self.leftView = paddingView;
    self.leftViewMode = UITextFieldViewModeAlways;
}

-(void) setRightPadding:(int) paddingValue
{
    UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, paddingValue, self.frame.size.height)];
    self.rightView = paddingView;
    self.rightViewMode = UITextFieldViewModeAlways;
}

@end

Beispiel für die Verwendung

#import "UITextField+PaddingText.h"

[self.YourTextField setLeftPadding:20.0f];

Ich hoffe, es hilft euch weiter

Prost

16voto

superarts.org Punkte 6757

Schnelle Version:

extension UITextField {
    @IBInspectable var padding_left: CGFloat {
        get {
            LF.log("WARNING no getter for UITextField.padding_left")
            return 0
        }
        set (f) {
            layer.sublayerTransform = CATransform3DMakeTranslation(f, 0, 0)
        }
    }
}

Damit Sie in IB einen Wert zuweisen können

IBInspectable setting represented in Interface Builder

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