Crea spazio all'inizio di un UITextField


149

Voglio lasciare un po 'di spazio all'inizio di un UITextField, proprio come qui: aggiungi il margine sinistro a UITextField

Ma non so come farlo con Swift.


bene, non puoi sottoclassare oggetti rapidi in Objective-C, ma puoi farlo al contrario ... Quindi suppongo che tu aggiusti la risposta e la combini con: developer.apple.com/library/prerelease/ ios / documentazione / Swift / ...
Grady Player il

1
Questa probabilmente non è la soluzione migliore, ma potresti creare uiview * paddingView and do UITextField.leftView = paddingView. quindi dai all'imbottitura la larghezza desiderata.
ipalibowhyte,

1
la vista di riempimento sarebbe solo un UIView vaniglia che ha la larghezza che desideri
Grady Player

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

Risposte:


283

Questo è quello che sto usando in questo momento:

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

Non ho mai impostato un'altra imbottitura, ma puoi modificare. Questa classe non si occupa di rightView e leftView nel campo di testo. Se vuoi che sia gestito correttamente, puoi usare qualcosa di simile (esempio in objc e ho solo bisogno di 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;
}

Perché raddoppi gli inserti superiore e sinistro quando calcoli larghezza e altezza? Non dovrebbe aver bisogno di farlo. È necessario aggiungere insieme i due inserti pertinenti e sottrarre il totale dai limiti originali. O semplicemente sottrarre entrambi in sequenza.
Ash,

1
@ Mr.UB Controlla quale piattaforma è il dispositivo attuale e crea una diversa imbottitura in base a quello. stackoverflow.com/questions/4567728/… . Probabilmente con qualcosa del genere
Haagenti,

Apple fornisce l'equivalente del newBoundsmetodo con la UIEdgeInsetsInsetRectfunzione. Invece di return self.newBounds(bounds)te puoi usare return UIEdgeInsetsInsetRect(bounds, padding)e rimuovere il newBoundsmetodo.
Mobile Dan

Se il tuo campo di testo è composto da più righe, questo centra il testo segnaposto e sostituisce textAlignment = .left e contentVerticalAlignment = .top
Codice Wiget

@Ryan È passato un po 'di tempo, ma un UITextField è una sola riga che ho pensato. Un UITextView dovrebbe essere utilizzato quindi per multilinea.
Haagenti,

196

Se usi un'estensione, non è necessario sottoclassare UITextField e le nuove funzionalità saranno rese disponibili a qualsiasi UITextField nella tua app:

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

Quando devo impostare il riempimento di un campo di testo in qualsiasi punto della mia applicazione, faccio semplicemente quanto segue:

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

Utilizzando le estensioni Swift, la funzionalità viene aggiunta a UITextField direttamente senza sottoclasse.

Spero che questo ti aiuti!


8
Ottima soluzione, molto elegante. L'unica modifica che ho apportato è stata l'aggiunta in un'unica funzione, in modo da ottenere qualcosa come textField.setPaddingFor (a sinistra: 10, a destra: 10). Entrambi i parametri sono facoltativi, quindi se passi zero l'imbottitura sarà 0.
Nermin Sehic

4
Grande! Ma se si imposta textField.clearButtonMode = .always, è necessario impostare solo il riempimento sinistro. L'imbottitura destra sposta il pulsante Clear verso destra.
Peter Kreinz,

2
Un'osservazione È più simile a un'imbottitura iniziale / finale. Ma la cosa strana è che risponde all'allineamento del testo nel campo di testo !! non la direzione della lingua dell'app.
Hasan,

come impostare in UILabel?
Innocenzo

Grande! Funziona sia per il testo principale che per il segnaposto.
Akash Bhardwaj,

70

X, Y, Z sono i valori desiderati

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

10
Questo non sembra funzionare con textField.clearButtonMode = UITextFieldViewMode.Always - anche il pulsante Clear viene spostato a destra
CaptainProton

1
Non funziona quando è necessario visualizzare il pulsante Cancella ... anche il pulsante Cancella viene spostato.
xdev,

Questa risposta è breve ma non completa e potrebbe essere risolta in un secondo momento. @Adrian hai un ottimo punto, ma non è così. Il motivo per cui devi farlo con una sottoclasse è per tutti i casi limite. Questo codice probabilmente si arresterà in modo anomalo prima della soluzione della sottoclasse. Ma hai ragione a non scrivere codice non strettamente necessario e che può essere fornito utilizzando le librerie fornite, ma non dovresti abusare nemmeno delle librerie standard
Haagenti,

Dov'è bello! Thnx!
Booharin,

46

Tale margine può essere raggiunto impostando leftView/ rightViewto UITextField.

Aggiornato per 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

Ho appena aggiunto / posizionato un UIViewlato sinistro e destro del campo di testo. Quindi ora la digitazione inizierà dopo la visualizzazione.

Grazie

Spero che questo abbia aiutato ...


1
se qualcuno ha bisogno di "obiettivo c" qui è il codice, UIView * paddingView = [[UIView alloc] initWithFrame: CGRectMake (0, 0, 15, self. userNameTxtFldOutlet.frame.size.height)]; se stesso. userNameTxtFldOutlet.leftView = paddingView; se stesso. userNameTxtFldOutlet.leftViewMode = UITextFieldViewModeAlways;
Avaan,

1
Questa soluzione è molto più pulita della sottoclasse sopra menzionata. La sottoclasse dovrebbe essere evitata il più possibile. Suggerisco la seguente lettura krakendev.io/blog/subclassing-can-suck-and-heres-why
Sylvain

33

Swift 4, Xcode 9

Mi piace la risposta di Pheepster , ma che ne dici di fare tutto dall'estensione, senza richiedere il codice VC o alcuna sottoclasse:

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

Sarebbe più sicuro da farerightView?.frame.size.width ?? 0
Tal

Potrebbe. Per quanto mi riguarda, non chiamo mai il getter in modo che non mi dia fastidio.
Teodor Ciuraru,

1
Ragazzi, ho modificato i nomi dei metodi da paddingLefta paddingLeftCustome anche l'altro. Se non lo avessi fatto, un bug che mi seguiva da due settimane sarebbe apparso quando stavi usando Views che hanno un UITextView (come UISearchBar). Solo ... non impostare i nomi predefiniti.
Teodor Ciuraru,

17

in Swift 4.2 e Xcode 10

Inizialmente il mio campo di testo è così.

inserisci qui la descrizione dell'immagine

Dopo aver aggiunto l'imbottitura sul lato sinistro il mio campo di testo è ...

inserisci qui la descrizione dell'immagine

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

In questo modo possiamo anche creare il lato destro. (TextFieldName.rightViewMode = .always)

Se si desidera il codice di tipo SharedInstance (scrivere una volta, utilizzare tutti gli articoli) consultare il codice seguente.

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

    }
}

Ora chiama questa funzione in questo modo.

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

2
L'estensione non dovrebbe funzionare meglio piuttosto che introdurre una classe condivisa per un'attività così piccola?
Sharkes Monken,

@ Sharkes Monken, non capisco
iOS

@ Sharkes Monken, puoi spiegarmelo per favore. Grazie.
iOS

1
Penso che significhi l'estensione UITextField per la funzione, singleton per questa funzione di supporto non è buona
logan.Nguyen

14

Semplice soluzione rapida 3 - aggiungi il codice per viewDidLoad:

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

Non c'è bisogno di un codice ridicolmente lungo


Questo non funziona per UITextField all'interno di una UISearchBar. :( Ho bisogno della soluzione che funzioni specificamente in quel caso :(
Miki

@livtay Questo non funzionerà quando usi clearButtonMode o vuoi avere un leftView, ecc. Questa è comunque una vittoria veloce ma fai attenzione alla buca in cui stai andando.
Haagenti

13

Usa la mia estensione Swift 5 testata:

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

Come usare

// 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. Grazie.
Carlo,

@Carlo Grazie mille Carlo :)
Fabio,

10

Per creare una vista di riempimento per 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
}

8

Sottoclasse UITextField è la strada da percorrere. Apri un parco giochi e aggiungi il seguente codice:

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

Questo è quasi perfetto. Probabilmente hai un segnaposto che ha un metodo saggio simile: "placeholderRectForBounds" che dovresti anche sovrascrivere e ciò che aggiungi come x dovrebbe essere sottratto dalla larghezza, altrimenti non puoi vedere che tipo quando il testo supera la lunghezza di il campo
Haagenti,

se la larghezza è sinistra 25 dovrebbe essere meno 50 per avere un'imbottitura uguale
Haagenti,

7

Ecco la risposta di Haagenti aggiornata 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)
    }

}

Riferimento: aggiornamento a Swift 4.2 .

Modifica : conto per pulsante Cancella.


6

Crea UIView con lo spazio di riempimento richiesto e aggiungilo al membro textfield.leftView e imposta il membro textfield.leftViewMode su 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

Inserisci questo codice nel tuo 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

Per me funziona :)


5

Questa riga di codice mi ha salvato:

Per Xamarin.iOS:

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

Per Swift:

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

4

La risposta di ScareCrow 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)
}

4

In Swift 3. Puoi usare UITextField personalizzato con rientro impostato nel suo costruttore. Non è necessaria una dichiarazione aggiuntiva in un controller.

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

Modo semplice: farlo estendendo 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
       }
   }

}

Quindi puoi impostare il riempimento su qualsiasi bordo in questo modo:

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

prova lo stesso codice ma con le viste colorate a sinistra e a destra su iOS 13 e costruiscilo con xCode 11 ....)) sarai sorpreso di come il textView cambia le sue inserzioni e caldo sposta le viste verso i bordi in modo che le viste aggiunte non siano completamente visibili
Massmaker,

4

Preferisco utilizzare la IBDesignableclasse e le IBInspectableproprietà per consentirmi di impostare il riempimento tramite storyboard Xcode e mantenerlo riutilizzabile. Ho anche aggiornato il codice per funzionare in 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

* Estensione di 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
        }
    }

}

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)
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.