Erstellen Sie Platz am Anfang eines UITextField

149

Ich möchte am Anfang eines UITextField ein wenig Platz lassen, genau wie hier: Fügen Sie UITextField einen linken Rand hinzu

Aber ich weiß nicht, wie ich das mit Swift machen soll.

LinusGeffarth
quelle
Nun, Sie können in Objective-C keine schnellen Objekte in Unterklassen unterteilen, aber Sie können es auch umgekehrt tun. Ich vermute, Sie passen die Antwort einfach an und kombinieren sie mit: developer.apple.com/library/prerelease/ ios / Dokumentation / Swift /…
Grady Player
1
Dies ist wahrscheinlich nicht die beste Lösung, aber Sie könnten eine uiview * paddingView erstellen und tun UITextField.leftView = paddingView. Geben Sie der Polsteransicht die gewünschte Breite.
Ipalibowhyte
1
Die Polsteransicht wäre nur eine Vanille-UIView, die die Breite hat, die Sie möchten
Grady Player
Für Swift 5: textField.layoutMargins.left = 20
Oleksandr

Antworten:

283

Dies ist, was ich gerade benutze:

Swift 4.2

class TextField: UITextField {

    let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)

    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }
}

Swift 4

class TextField: UITextField {

    let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)

    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }
}

Swift 3:

class TextField: UITextField {

    let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }
}

Ich habe nie eine andere Polsterung eingestellt, aber Sie können sie anpassen. Diese Klasse kümmert sich nicht um die rechte Ansicht und die linke Ansicht im Textfeld. Wenn Sie möchten, dass das richtig gehandhabt wird, können Sie so etwas wie (Beispiel in objc und ich brauchte nur die richtige Ansicht:

- (CGRect)textRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)placeholderRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeWhileEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)adjustRectWithWidthRightView:(CGRect)bounds {
    CGRect paddedRect = bounds;
    paddedRect.size.width -= CGRectGetWidth(self.rightView.frame);

    return paddedRect;
}
Haagenti
quelle
Warum verdoppeln Sie die oberen und linken Einfügungen bei der Berechnung von Breite und Höhe? Sollte das nicht tun müssen. Sie sollten die beiden relevanten Einfügungen addieren und die Summe von den ursprünglichen Grenzen abziehen. Oder subtrahieren Sie einfach beide nacheinander.
Ash
1
@ Mr.UB Überprüfen Sie, auf welcher Plattform sich das aktuelle Gerät befindet, und erstellen Sie darauf basierend eine andere Polsterung. stackoverflow.com/questions/4567728/… . Wahrscheinlich mit so etwas
Haagenti
Apple stellt das Äquivalent der newBoundsMethode mit der UIEdgeInsetsInsetRectFunktion zur Verfügung. Stattdessen können return self.newBounds(bounds)Sie return UIEdgeInsetsInsetRect(bounds, padding)die newBoundsMethode verwenden und entfernen .
Mobile Dan
Wenn Ihr Textfeld mehrzeilig ist, wird der Platzhaltertext zentriert und textAlignment = .left und contentVerticalAlignment = .top
Code Wiget
@ Ryan Es ist eine Weile her, aber ein UITextField ist nur einzeilig, dachte ich. Eine UITextView sollte dann für mehrzeilig verwendet werden.
Haagenti
194

Wenn Sie eine Erweiterung verwenden, müssen Sie UITextField nicht unterordnen, und die neue Funktionalität wird jedem UITextField in Ihrer App zur Verfügung gestellt:

extension UITextField {
    func setLeftPaddingPoints(_ amount:CGFloat){
        let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
        self.leftView = paddingView
        self.leftViewMode = .always
    }
    func setRightPaddingPoints(_ amount:CGFloat) {
        let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
        self.rightView = paddingView
        self.rightViewMode = .always
    }
}

Wenn ich das Auffüllen eines Textfelds an einer beliebigen Stelle in meiner Anwendung festlegen muss, gehe ich einfach wie folgt vor:

    textField.setLeftPaddingPoints(10)
    textField.setRightPaddingPoints(10)

Bei Verwendung von Swift-Erweiterungen wird die Funktionalität direkt ohne Unterklasse zum UITextField hinzugefügt.

Hoffe das hilft!

Pheepster
quelle
8
Ausgezeichnete Lösung, sehr elegant. Die einzige Änderung, die ich vorgenommen habe, war, dass ich sie zu einer Funktion hinzugefügt habe, sodass ich so etwas wie textField.setPaddingFor (links: 10, rechts: 10) erhalte. Beide Parameter sind optional, daher ist die Polsterung 0, wenn Sie Null bestehen.
Nermin Sehic
4
Toll! Wenn Sie jedoch immer textField.clearButtonMode =. Setzen, müssen Sie nur den linken Abstand festlegen. Durch die rechte Polsterung wird die Löschtaste nach rechts verschoben.
Peter Kreinz
2
Eine Beobachtung. Es ist eher eine führende / nachlaufende Polsterung. Aber das Seltsame ist, dass es auf die Textfeld-Textausrichtung reagiert !! nicht die Richtung der App-Sprache.
Hasan
Wie setze ich in UILabel?
Unschuldiger
Toll! Funktioniert sowohl für den Haupttext als auch für den Platzhalter.
Akash Bhardwaj
70

X, Y, Z sind Ihre gewünschten Werte

textField.layer.sublayerTransform = CATransform3DMakeTranslation(x, y, z)
ak2g
quelle
10
Dies scheint nicht zu Arbeit mit textField.clearButtonMode = UITextFieldViewMode.Always - die Clear - Taste wird auch nach rechts bewegt
captain
1
Funktioniert nicht, wenn die Schaltfläche Löschen angezeigt werden muss ... die Schaltfläche Löschen wird ebenfalls verschoben.
Xdev
Diese Antwort ist kurz, aber nicht vollständig und kann später behoben werden. @ Adrian du hast einen tollen Punkt, aber das ist nicht der Weg. Der Grund, warum Sie dies mit einer Unterklasse tun müssen, ist für alle Randfälle. Dieser Code wird wahrscheinlich vor der Unterklassenlösung abstürzen. Aber Sie haben Recht, dass Sie keinen Code schreiben sollten, der nicht unbedingt benötigt wird und unter Verwendung der angegebenen Bibliotheken bereitgestellt werden kann, aber Sie sollten auch nicht die Standardbibliotheken missbrauchen
Haagenti
Wo cool! Danke!
Booharin
45

Ein solcher Spielraum kann durch Setzen von leftView/ rightViewto erreicht werden UITextField.

Aktualisiert für Swift 4

// Create a padding view for padding on left
textField.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: textField.frame.height))
textField.leftViewMode = .always

// Create a padding view for padding on right
textField.rightView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: textField.frame.height))
textField.rightViewMode = .always

Ich habe gerade eine UIViewlinke und rechte Seite des Textfelds hinzugefügt / platziert . Nun beginnt die Eingabe nach der Ansicht.

Vielen Dank

Hoffe das hat geholfen ...

bei Fertigstellung
quelle
1
Wenn in "Ziel c" jemand den Code benötigt, ist UIView * paddingView = [[UIView-Zuweisung] initWithFrame: CGRectMake (0, 0, 15, self. userNameTxtFldOutlet.frame.size.height)]; selbst. userNameTxtFldOutlet.leftView = paddingView; selbst. userNameTxtFldOutlet.leftViewMode = UITextFieldViewModeAlways;
Avaan
1
Diese Lösung ist viel sauberer als die oben erwähnte Unterklasse. Unterklassen sollten so weit wie möglich vermieden werden. Ich schlage die folgende Lektüre vor: krakendev.io/blog/subclassing-can-suck-and-heres-why
Sylvain
33

Swift 4, Xcode 9

Ich mag die Antwort von Pheepster , aber wie wäre es, wenn wir alles von der Erweiterung aus machen, ohne VC-Code oder Unterklassen zu benötigen:

import UIKit

@IBDesignable
extension UITextField {

    @IBInspectable var paddingLeftCustom: 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 paddingRightCustom: 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     
        }
    }
}
Teodor Ciuraru
quelle
Es wäre sicherer zu tunrightView?.frame.size.width ?? 0
Tal
Es könnte. Ich selbst rufe nie den Getter an, damit es mich nicht stört.
Teodor Ciuraru
1
Leute, ich habe die Namen der Methoden von paddingLeftbis paddingLeftCustomund die andere auch geändert . Wenn ich dies nicht getan hätte, wäre ein Fehler aufgetreten, der mir zwei Wochen folgte, wenn Sie Ansichten mit einer UITextView (wie UISearchBar) verwendet haben. Nur ... nicht die Standardnamen festlegen.
Teodor Ciuraru
17

in Swift 4.2 und Xcode 10

Anfangs ist mein Textfeld so.

Geben Sie hier die Bildbeschreibung ein

Nach dem Hinzufügen von Auffüllungen auf der linken Seite ist mein Textfeld ...

Geben Sie hier die Bildbeschreibung ein

//Code for left padding 
textFieldName.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: textFieldName.frame.height))
textFieldName.leftViewMode = .always

Auf diese Weise können wir auch die rechte Seite erstellen. (TextFieldName.rightViewMode = .always)

Wenn Sie einen SharedInstance-Typcode wünschen (einmal schreiben, verwenden Sie jede Ware), lesen Sie den folgenden Code.

//This is my shared class
import UIKit
class SharedClass: NSObject {
    static let sharedInstance = SharedClass()

    //This is my padding function.
    func textFieldLeftPadding(textFieldName: UITextField) {
    // Create a padding view
    textFieldName.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 3, height: textFieldName.frame.height))
    textFieldName.leftViewMode = .always//For left side padding
    textFieldName.rightViewMode = .always//For right side padding
    }

    private override init() {

    }
}

Rufen Sie diese Funktion nun so auf.

//This single line is enough
SharedClass.sharedInstance.textFieldLeftPadding(textFieldName:yourTF)
iOS
quelle
2
Sollte die Erweiterung nicht besser funktionieren, als eine gemeinsame Klasse für eine so kleine Aufgabe einzuführen?
Sharkes Monken
@ Sharkes Monken, ich verstehe nicht
iOS
@ Sharkes Monken, kannst du es mir bitte erklären? Danke dir.
iOS
1
Ich denke, es bedeutet Erweiterung UITextField für die Funktion, Singleton für diesen Helfer func ist nicht gut
logan.Nguyen
14

Einfache Swift 3-Lösung - Fügen Sie Code zu viewDidLoad hinzu:

let indentView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 20))
textField.leftView = indentView
textField.leftViewMode = .always

Keine Notwendigkeit für lächerlich langen Code

livtay
quelle
Dies funktioniert nicht für UITextField in einer UISearchBar. :( Ich brauche die Lösung, die speziell in diesem Fall funktioniert :(
Miki
@livtay Dies wird nicht funktionieren, wenn Sie clearButtonMode verwenden oder eine leftView usw. haben möchten. Dies ist zwar ein schneller Gewinn, aber beachten Sie nur das Loch, in das Sie gehen.
Haagenti
13

Verwenden Sie meine Erweiterung Swift 5 getestet:

extension UITextField {

enum PaddingSpace {
    case left(CGFloat)
    case right(CGFloat)
    case equalSpacing(CGFloat)
}

func addPadding(padding: PaddingSpace) {

    self.leftViewMode = .always
    self.layer.masksToBounds = true

    switch padding {

    case .left(let spacing):
        let leftPaddingView = UIView(frame: CGRect(x: 0, y: 0, width: spacing, height: self.frame.height))
        self.leftView = leftPaddingView
        self.leftViewMode = .always

    case .right(let spacing):
        let rightPaddingView = UIView(frame: CGRect(x: 0, y: 0, width: spacing, height: self.frame.height))
        self.rightView = rightPaddingView
        self.rightViewMode = .always

    case .equalSpacing(let spacing):
        let equalPaddingView = UIView(frame: CGRect(x: 0, y: 0, width: spacing, height: self.frame.height))
        // left
        self.leftView = equalPaddingView
        self.leftViewMode = .always
        // right
        self.rightView = equalPaddingView
        self.rightViewMode = .always
    }
}
}

Wie benutzt man

// equal padding
yourTextField.addPadding(padding: .equalSpacing(10)) 

// padding right 
yourTextField.addPadding(padding: .right(10))

// padding left
yourTextField.addPadding(padding: .left(10)) 
Fabio
quelle
@ JoséRaúlToledanoR THX :)
Fabio
Elegant. Danke dir.
Carlo
@ Carlo Grazie Mille Carlo :)
Fabio
10

So erstellen Sie eine Füllansicht für UITextField in Swift 5

func txtPaddingVw(txt:UITextField) {
    let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 5, height: 5))
    txt.leftViewMode = .always
    txt.leftView = paddingView
}
Hardik Thakkar
quelle
8

Die Unterklasse UITextField ist der richtige Weg. Öffnen Sie einen Spielplatz und fügen Sie den folgenden Code hinzu:

class MyTextField : UITextField {
    var leftTextMargin : CGFloat = 0.0

    override func textRectForBounds(bounds: CGRect) -> CGRect {
        var newBounds = bounds
        newBounds.origin.x += leftTextMargin
        return newBounds
    }

    override func editingRectForBounds(bounds: CGRect) -> CGRect {
        var newBounds = bounds
        newBounds.origin.x += leftTextMargin
        return newBounds
    }
}

let tf = MyTextField(frame: CGRect(x: 0, y: 0, width: 100, height: 44))
tf.text = "HELLO"
tf.leftTextMargin = 25
tf.setNeedsLayout()
tf.layoutIfNeeded()
Eric Sean Conner
quelle
Das ist fast perfekt. Sie haben wahrscheinlich einen Platzhalter mit einer ähnlichen Methode: "placeholderRectForBounds", die Sie ebenfalls überschreiben sollten, und was Sie als x hinzufügen, sollte von der Breite abgezogen werden, da Sie sonst nicht sehen können, welcher Typ, wenn der Text die Länge von überschreitet das Feld
Haagenti
Wenn links 25 ist, sollte die Breite minus 50 sein, um die gleiche Polsterung zu
erzielen
7

Hier ist Haagentis Antwort, die auf Swift 4.2 aktualisiert wurde:

class PaddedTextField: UITextField {

    func getPadding(plusExtraFor clearButtonMode: ViewMode) -> UIEdgeInsets {
        var padding = UIEdgeInsets(top: 11, left: 16, bottom: 11, right: 16)

        // Add additional padding on the right side when showing the clear button
        if self.clearButtonMode == .always || self.clearButtonMode == clearButtonMode {
            padding.right = 28
        }

        return padding
    }

    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        let padding = getPadding(plusExtraFor: .unlessEditing)
        return bounds.inset(by: padding)
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        let padding = getPadding(plusExtraFor: .unlessEditing)
        return bounds.inset(by: padding)
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        let padding = getPadding(plusExtraFor: .whileEditing)
        return bounds.inset(by: padding)
    }

}

Referenz: Upgrade auf Swift 4.2 .

Bearbeiten : Schaltfläche zum Löschen des Kontos.

CartoonChess
quelle
6

Erstellen Sie UIView mit dem erforderlichen Auffüllbereich, fügen Sie es dem Element textfield.leftView hinzu und setzen Sie das Element textfield.leftViewMode auf UITextFieldViewMode.Always

// For example if you have textfield named title
@IBOutlet weak var title: UITextField!
// Create UIView 
let paddingView : UIView = UIView(frame: CGRectMake(0, 0, 5, 20))
//Change your required space instaed of 5.
title.leftView = paddingView
title.leftViewMode = UITextFieldViewMode.Always
PAC
quelle
5

Fügen Sie diesen Code in Ihr viewDidLoad():

textField.delegate = self

let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: self.textField.frame.height))
textField.leftView = paddingView
textField.leftViewMode = UITextFieldViewMode.always

Für mich geht das :)

D. Garcia
quelle
5

Diese eine Codezeile hat mich gerettet:

Für Xamarin.iOS:

textField.Layer.SublayerTransform = CATransform3D.MakeTranslation(5, 0, 0);

Für Swift:

textField.layer.sublayerTransform = CATransform3DMakeTranslation(5, 0, 0);
Shanu Singh
quelle
4

ScareCrows Antwort in Swift 3

let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5);

override func textRect(forBounds bounds: CGRect) -> CGRect {
    return UIEdgeInsetsInsetRect(bounds, padding)
}

override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
    return UIEdgeInsetsInsetRect(bounds, padding)
}

override func editingRect(forBounds bounds: CGRect) -> CGRect {
    return UIEdgeInsetsInsetRect(bounds, padding)
}
spogebob92
quelle
4

In Swift 3. können Sie ein benutzerdefiniertes UITextField mit einem Einzug verwenden, der in seinem Konstruktor festgelegt ist. Keine zusätzliche Deklaration in einem Controller erforderlich.

class CustomTextField : UITextField {

private let indentView = UIView(frame: CGRect(x: 0, y:0, width: 10, height: 10))

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.leftView = indentView
    self.leftViewMode = .always 
        }
}
Photonenpunkt
quelle
4

Einfacher Weg: Dazu erweitern Sie UITextField

extension UITextField {

   func setPadding(left: CGFloat? = nil, right: CGFloat? = nil){
       if let left = left {
          let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: left, height: self.frame.size.height))
          self.leftView = paddingView
          self.leftViewMode = .always
       }

       if let right = right {
           let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: right, height: self.frame.size.height))
           self.rightView = paddingView
           self.rightViewMode = .always
       }
   }

}

Dann können Sie die Polsterung auf folgende Weise auf eine beliebige Kante einstellen:

textField.setPadding(left: 5, right: 5)
Musa almatri
quelle
Versuchen Sie den gleichen Code, aber mit farbigen Links- und Rechtsansichten unter iOS 13 und erstellen Sie ihn mit xCode 11 ....)) Sie werden überrascht sein, wie die Textansicht die Einfügungen ändert und die Ansichten heiß in Richtung bewegt die Kanten, so dass die hinzugefügten Ansichten nicht vollständig sichtbar sind
Massmaker
4

Ich bevorzuge die Verwendung von IBDesignableKlassen und IBInspectableEigenschaften, damit ich das Auffüllen über Xcode-Storyboards festlegen und wiederverwendbar halten kann. Ich habe auch den Code aktualisiert, um in Swift 4 zu funktionieren.

import Foundation
import UIKit

@IBDesignable
class PaddableTextField: UITextField {

    var padding = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)

    @IBInspectable var left: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    @IBInspectable var right: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    @IBInspectable var top: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    @IBInspectable var bottom: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    func adjustPadding() {
         padding = UIEdgeInsets(top: top, left: left, bottom: bottom, right: right)

    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
    }

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: UIEdgeInsets(top: top, left: left, bottom: bottom, right: right))
    }

    override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: UIEdgeInsets(top: top, left: left, bottom: bottom, right: right))
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
         return bounds.inset(by: UIEdgeInsets(top: top, left: left, bottom: bottom, right: right))
    }
}
Payne Miller
quelle
2

* Erweitern von UITextField in Swift 5 *

import UIKit

@IBDesignable
extension UITextField {

    @IBInspectable var paddingLeftCustom: 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 paddingRightCustom: 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
        }
    }

}
Emil Georgiev
quelle
0
//MARK:-  Use this class for different type of Roles

import UIKit

class HelperExtensionViewController: UIViewController {

}

//MARK:- Extension

extension UIImageView
{
    func setImageCornerRadius()
    {
        self.layer.cornerRadius = self.frame.size.height/2
        self.clipsToBounds = true
    }

    func setImageCornerRadiusInPoints(getValue:CGFloat)
    {
        self.layer.cornerRadius = getValue
        self.clipsToBounds = true
    }
}

extension UIButton
{
    func setButtonCornerRadiusOnly()
    {
        self.layer.cornerRadius = self.frame.size.height/2
        self.clipsToBounds = true
    }

    func setBtnCornerRadiusInPoints(getValue:CGFloat)
    {
        self.layer.cornerRadius = getValue
        self.clipsToBounds = true
    }


}

extension UITextField
{
    func setTextFieldCornerRadiusWithBorder()
    {
        self.layer.cornerRadius = self.frame.size.height/2
        self.layer.borderColor = UIColor.darkGray.cgColor
        self.backgroundColor = UIColor.clear
        self.layer.borderWidth = 0.5
        self.clipsToBounds = true
    }

    func setLeftPaddingPoints(_ amount:CGFloat){
        let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
        self.leftView = paddingView
        self.leftViewMode = .always
    }
    func setRightPaddingPoints(_ amount:CGFloat) {
        let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
        self.rightView = paddingView
        self.rightViewMode = .always
    }
}



extension UIView
{

    func setCornerRadius()
    {
        self.layer.cornerRadius = self.frame.size.height/2
        self.clipsToBounds = true
    }

    // OUTPUT 1
    func setViewCornerRadiusWithBorder()
    {
        self.layer.cornerRadius = self.frame.size.height/2
        self.layer.borderColor = UIColor.init(red: 95.0/255.0, green: 229.0/255.0, blue: 206.0/255.0, alpha: 1.0).cgColor
        self.backgroundColor = UIColor.clear
        self.layer.borderWidth = 1.0
        self.clipsToBounds = true
    }

    func layoutSubviews(myView:UIView)
    {
        let shadowPath = UIBezierPath(rect: myView.bounds)
        myView.layer.masksToBounds = false
        myView.layer.shadowColor = UIColor.lightGray.cgColor
        myView.layer.shadowOffset = CGSize(width: -1.0, height: 2.0)
        myView.layer.shadowOpacity = 0.5
        myView.layer.shadowPath = shadowPath.cgPath
    }

    func layoutSubviews2(myView:UIView)
    {
        let shadowPath = UIBezierPath(rect: myView.bounds)
        myView.clipsToBounds = true
        myView.layer.masksToBounds = false
        myView.layer.shadowColor = UIColor.black.cgColor
        myView.layer.shadowOffset = CGSize(width: 0.0, height: 1.0)
        myView.layer.shadowOpacity = 0.2
        myView.layer.shadowPath = shadowPath.cgPath

    }

    func setViewCornerRadiusInPoints(getValue:CGFloat)
    {
        self.layer.cornerRadius = getValue
        self.clipsToBounds = true
    }


    func dropShadow(scale: Bool = true) {
        layer.masksToBounds = false
        layer.shadowColor = UIColor.black.cgColor
        layer.shadowOpacity = 0.5
        layer.shadowOffset = CGSize(width: -1, height: 1)
        layer.shadowRadius = 1

        layer.shadowPath = UIBezierPath(rect: bounds).cgPath
        layer.shouldRasterize = true
        layer.rasterizationScale = scale ? UIScreen.main.scale : 1
    }

    // OUTPUT 2
    func dropShadow(color: UIColor, opacity: Float = 0.5, offSet: CGSize, radius: CGFloat = 1, scale: Bool = true) {
        layer.masksToBounds = false
        layer.shadowColor = color.cgColor
        layer.shadowOpacity = opacity
        layer.shadowOffset = offSet
        layer.shadowRadius = radius

        layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath
        layer.shouldRasterize = true
        layer.rasterizationScale = scale ? UIScreen.main.scale : 1
    }

    func setGradientBackground(myview:UIView) {
        let colorTop =  UIColor(red: 100.0/255.0, green: 227.0/255.0, blue: 237.0/255.0, alpha: 1.0).cgColor
        let colorBottom = UIColor(red: 141.0/255.0, green: 109.0/255.0, blue: 164.0/255.0, alpha: 1.0).cgColor

        let gradientLayer = CAGradientLayer()
        gradientLayer.colors = [colorTop, colorBottom]
        gradientLayer.locations = [1.0, 1.0]
        gradientLayer.frame = myview.bounds

        myview.layer.insertSublayer(gradientLayer, at:0)
    }
}
Davender Verma
quelle