Crear espacio al comienzo de un UITextField


149

Quiero dejar un poco de espacio al comienzo de un UITextField, como aquí: Agregar margen izquierdo a UITextField

Pero no sé cómo hacer eso con Swift.


bueno, no puedes subclasificar objetos rápidos en Objective-C, pero puedes hacerlo al revés ... Así que supongo que solo ajustas la respuesta y la combinas con: developer.apple.com/library/prerelease/ ios / documentation / Swift / ...
Grady Player

1
Probablemente esta no sea la mejor solución, pero podría hacer un uiview * paddingView y hacer UITextField.leftView = paddingView. así que proporcione a la vista de relleno el ancho deseado.
ipalibowhyte

1
la vista de relleno solo sería una vista de UIV de vainilla que tiene el ancho que le gustaría
Grady Player

Para Swift 5: textField.layoutMargins.left = 20
Oleksandr

Respuestas:


283

Esto es lo que estoy usando ahora:

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)
    }
}

Nunca configuré otro relleno, pero puedes ajustarlo. Esta clase no se ocupa de rightView e leftView en el campo de texto. Si desea que se maneje correctamente, puede usar algo como (ejemplo en objc y solo necesitaba el rightView:

- (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;
}

¿Por qué duplica las inserciones superior e izquierda al calcular el ancho y la altura? No debería necesitar hacer eso. Debe sumar las dos inserciones relevantes y restar el total de los límites originales. O simplemente restar ambos en secuencia.
Ash

1
@ Mr.UB Compruebe en qué plataforma se encuentra el dispositivo actual y cree un relleno diferente en función de eso. stackoverflow.com/questions/4567728/… . Probablemente con algo como esto
Haagenti

Apple proporciona el equivalente del newBoundsmétodo con la UIEdgeInsetsInsetRectfunción. En lugar de return self.newBounds(bounds)usted podría usar return UIEdgeInsetsInsetRect(bounds, padding)y eliminar el newBoundsmétodo.
Móvil Dan

Si su campo de texto tiene varias líneas, esto hace que el texto del marcador de posición esté centrado y sustituya textAlignment = .left y contentVerticalAlignment = .top
Code Wiget el

@ Ryan Ha pasado un tiempo, pero un UITextField es de una sola línea, pensé. Un UITextView debe usarse entonces para líneas múltiples.
Haagenti

194

Si usa una extensión, no es necesario subclasificar UITextField y la nueva funcionalidad estará disponible para cualquier UITextField en su aplicación:

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
    }
}

Cuando necesito configurar el relleno de un campo de texto en cualquier parte de mi aplicación, simplemente hago lo siguiente:

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

Usando extensiones Swift, la funcionalidad se agrega al UITextField directamente sin subclases.

¡Espero que esto ayude!


8
Excelente solución, muy elegante. El único cambio que hice fue que los agregué a una función para obtener algo como textField.setPaddingFor (izquierda: 10, derecha: 10). Ambos parámetros son opcionales, por lo tanto, si pasa cero, el relleno será 0.
Nermin Sehic

44
¡Excelente! Pero si establece textField.clearButtonMode = .always, solo debe establecer el relleno izquierdo. El relleno derecho moverá el botón de borrar a la derecha.
Peter Kreinz

2
Una observación Es más como un relleno inicial / final. ¡Pero, lo extraño es que responde a la alineación de texto del campo de texto! No es la dirección del idioma de la aplicación.
hasan

¿Cómo establecer en UILabel?
Inocente

¡Excelente! Funciona tanto para el texto principal como para el marcador de posición.
Akash Bhardwaj

70

X, Y, Z son sus valores deseados

textField.layer.sublayerTransform = CATransform3DMakeTranslation(x, y, z)

10
Esto no parece funcionar con textField.clearButtonMode = UITextFieldViewMode. Siempre - el botón de borrar también se mueve hacia la derecha
CaptainProton

1
No funciona cuando se necesita mostrar el botón Borrar ... el botón borrar también se mueve.
xdev

Esta respuesta es corta pero no completa y podría fallar más tarde. @ Adrian tienes un gran punto, pero este no es el camino. La razón por la que debe hacerlo con una subclase es para todos los casos límite. Este código probablemente se bloqueará antes de la solución de subclase. Pero tienes razón en que no se debe escribir código que no es estrictamente necesario y se puede proporcionar mediante el uso de las bibliotecas de dados, pero no se debe abusar de las bibliotecas estándar o bien
haagenti

Whery genial! Thnx!
Booharin

46

Tal margen se puede lograr estableciendo leftView/ rightViewa UITextField.

Actualizado para 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

Acabo de agregar / colocar un UIViewlado izquierdo y derecho del campo de texto. Entonces, la escritura comenzará después de la vista.

Gracias

Espero que esto haya ayudado ...


1
si alguien necesita en el "objetivo c" aquí está el código, UIView * paddingView = [[UIView alloc] initWithFrame: CGRectMake (0, 0, 15, self. userNameTxtFldOutlet.frame.size.height)]; yo. userNameTxtFldOutlet.leftView = paddingView; yo. userNameTxtFldOutlet.leftViewMode = UITextFieldViewModeAlways;
Avaan

1
Esta solución es mucho más limpia que la subclase mencionada anteriormente. Las subclases deben evitarse tanto como sea posible. Sugiero la siguiente lectura krakendev.io/blog/subclassing-can-suck-and-heres-why
Sylvain

33

Swift 4, Xcode 9

Me gusta la respuesta de Pheepster , pero ¿qué tal si lo hacemos todo desde la extensión, sin requerir código VC o ninguna subclasificación?

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     
        }
    }
}

Sería más seguro hacerlorightView?.frame.size.width ?? 0
Tal

Que podría. Yo, por mi parte, nunca llamo al captador para que no me moleste.
Teodor Ciuraru

1
Chicos, modifiqué los nombres de los métodos de paddingLefta paddingLeftCustomy el otro también. Si no lo hubiera hecho, habría aparecido un error que me siguió dos semanas cuando usaba Vistas que tienen un UITextView (como UISearchBar). Simplemente ... no establezca los nombres predeterminados.
Teodor Ciuraru

17

en Swift 4.2 y Xcode 10

Inicialmente mi campo de texto es así.

ingrese la descripción de la imagen aquí

Después de agregar relleno en el lado izquierdo, mi campo de texto es ...

ingrese la descripción de la imagen aquí

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

De esta manera, también podemos crear el lado derecho. (TextFieldName.rightViewMode = .always)

Si desea un código de tipo SharedInstance (escriba una vez, use todos los artículos), consulte el siguiente código.

//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() {

    }
}

Ahora llame a esta función así.

//This single line is enough
SharedClass.sharedInstance.textFieldLeftPadding(textFieldName:yourTF)

2
¿No debería la extensión funcionar mejor en lugar de introducir una clase compartida para una tarea tan pequeña?
Sharkes Monken

@ Sharkes Monken, no entiendo
iOS

@ Sharkes Monken, ¿puedes explicarlo por mí? Gracias.
iOS

1
Creo que significa extensión UITextField para la función, singleton para esta función auxiliar no es buena
logan.Nguyen

14

Solución simple de swift 3: agregue código para viewDidLoad:

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

No es necesario un código ridículamente largo


Esto no funciona para UITextField dentro de un UISearchBar. :( Necesito la solución que funcione específicamente en ese caso :(
Miki

@livtay Esto no funcionará cuando uses clearButtonMode o quieras tener un leftView, etc. Sin embargo, esta es una victoria rápida, pero solo ten en cuenta el agujero en el que estás entrando.
Haagenti

13

Utilice mi extensión Swift 5 probado:

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
    }
}
}

Cómo utilizar

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

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

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

@ JoséRaúlToledanoR THX :)
Fabio

Elegante. Gracias.
Carlo

@Carlo Grazie mille Carlo :)
Fabio

10

Para crear una vista de relleno para UITextField en 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
}

8

Subclasificar UITextField es el camino a seguir. Abra un patio de juegos y agregue el siguiente código:

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()

Esto es casi perfecto Probablemente tenga un marcador de posición que tenga un método similar: "placeholderRectForBounds", que también debe anular y lo que agregue como una x debe sustraerse del ancho; de lo contrario, no podrá ver qué tipo cuando el texto va más allá de la longitud de el campo
Haagenti

si lo que queda es 25, el ancho debe ser menos 50 para tener un relleno igual
Haagenti

7

Aquí está la respuesta de Haagenti actualizada a Swift 4.2:

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)
    }

}

Referencia: Actualización a Swift 4.2 .

Editar : cuenta para borrar el botón.


6

Cree UIView con el espacio de relleno requerido y agréguelo al miembro textfield.leftView y establezca el miembro textfield.leftViewMode en 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

5

Pon este código en tu 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

Esto funciona para mi :)


5

Esta línea de código me salvó:

Para Xamarin.iOS:

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

Para Swift:

textField.layer.sublayerTransform = CATransform3DMakeTranslation(5, 0, 0);

4

La respuesta de ScareCrow en 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)
}

4

En Swift 3. Puede usar UITextField personalizado con sangría que se establece en su constructor. No necesita una declaración adicional en un controlador.

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 
        }
}

4

Manera fácil: hacer esto extendiendo 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
       }
   }

}

Luego puede configurar el relleno en cualquier borde de esta manera:

textField.setPadding(left: 5, right: 5)

intente el mismo código pero con vistas de color a la izquierda y derecha en iOS 13 y compílelo con xCode 11 ....)) se sorprenderá de cómo textView cambia sus inserciones y caliente mueve las vistas hacia los bordes para que las vistas agregadas no sean completamente visibles
Massmaker

4

Prefiero usar la IBDesignableclase y las IBInspectablepropiedades para permitirme configurar el relleno a través de los guiones gráficos de Xcode y mantenerlo reutilizable. También he actualizado el código para que funcione en Swift 4.

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))
    }
}

2

* Extendiendo UITextField en 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
        }
    }

}

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)
    }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.