Buat ruang di awal UITextField


149

Saya ingin meninggalkan sedikit ruang di awal UITextField, seperti di sini: Tambahkan margin kiri ke UITextField

Tetapi saya tidak tahu bagaimana melakukannya dengan Swift.


baik, Anda tidak dapat mensubclass objek swift di Objective-C, tetapi Anda bisa melakukannya sebaliknya ... Jadi saya kira Anda, Anda hanya menyesuaikan jawaban dan menggabungkannya dengan: developer.apple.com/library/prerelease/ ios / dokumentasi / Swift / ...
Grady Player

1
Ini mungkin bukan solusi terbaik, tetapi Anda bisa membuat uiview * paddingView dan lakukan UITextField.leftView = paddingView. jadi beri tampilan padding lebar yang Anda inginkan.
ipalibowhyte

1
tampilan padding hanya akan menjadi vanilla UIView yang memiliki lebar yang Anda inginkan
Grady Player

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

Jawaban:


283

Inilah yang saya gunakan saat ini:

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

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

Saya tidak pernah mengatur padding lain tetapi Anda bisa men-tweak. Kelas ini tidak menangani rightView dan leftView di bidang teks. Jika Anda ingin hal itu ditangani dengan benar, Anda dapat menggunakan sesuatu seperti (contoh di objc dan saya hanya memerlukan 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;
}

Mengapa Anda menggandakan insets atas dan kiri saat menghitung lebar dan tinggi? Seharusnya tidak perlu melakukan itu. Anda harus menambahkan dua inset yang relevan bersama-sama dan kurangi total dari batas aslinya. Atau kurangi keduanya secara berurutan.
Ash

1
@ Mr.UB Periksa platform apa perangkat saat ini dan buat padding berbeda berdasarkan itu. stackoverflow.com/questions/4567728/… . Mungkin dengan sesuatu seperti ini
Haagenti

Apple menyediakan fungsi yang setara dengan newBoundsmetode UIEdgeInsetsInsetRect. Alih-alih return self.newBounds(bounds)Anda bisa menggunakan return UIEdgeInsetsInsetRect(bounds, padding)dan menghapus newBoundsmetode.
Ponsel Dan

Jika bidang teks Anda adalah beberapa baris, ini membuat teks placeholder terpusat dan menggantikan textAlignment = .left dan contentVerticalAlignment = .top
Code Wiget

@Ryan Sudah lama, tapi UITextField hanya satu-baris yang saya pikir. UITextView harus digunakan untuk multiline.
Haagenti

196

Jika Anda menggunakan ekstensi, tidak perlu subkelas UITextField dan fungsionalitas baru akan tersedia untuk setiap UITextField di aplikasi Anda:

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

Ketika saya perlu mengatur padding bidang teks di mana saja di aplikasi saya, saya cukup melakukan hal berikut:

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

Menggunakan ekstensi Swift, fungsionalitas ditambahkan ke UITextField secara langsung tanpa subklasifikasi.

Semoga ini membantu!


8
Solusi luar biasa, sangat elegan. Satu-satunya perubahan yang saya lakukan adalah saya menambahkannya ke dalam satu fungsi jadi saya mendapatkan sesuatu seperti textField.setPaddingFor (kiri: 10, kanan: 10). Kedua params, adalah opsional karena itu jika Anda lulus nol padding akan menjadi 0.
Nermin Sehic

4
Bagus! Tetapi jika Anda mengatur textField.clearButtonMode = .always, Anda harus mengatur hanya padding kiri. Padding kanan akan memindahkan tombol bening ke kanan.
Peter Kreinz

2
Satu pengamatan. Ini lebih seperti padding terkemuka / trailing. Tapi, yang aneh adalah bahwa hal itu menanggapi penyelarasan teks bidang teks !! bukan arah bahasa aplikasi.
hasan

cara mengatur di UILabel?
Innocent

Bagus! Berfungsi untuk teks utama dan juga untuk placeholder.
Akash Bhardwaj

70

X, Y, Z adalah nilai yang Anda inginkan

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

10
Ini sepertinya tidak berfungsi dengan textField.clearButtonMode = UITextFieldViewMode.Always - tombol yang jelas dipindahkan ke kanan juga
CaptainProton

1
Tidak berfungsi ketika tombol Hapus perlu ditampilkan ... tombol hapus dipindahkan juga.
xdev

Jawaban ini singkat tetapi tidak lengkap dan mungkin akan keluar kemudian. @Adrian Anda punya poin bagus, tapi ini bukan jalannya. Alasan Anda melakukannya dengan subclass adalah untuk semua kasus tepi. Kode ini mungkin akan macet sebelum solusi subclass. Tapi Anda benar bahwa Anda tidak boleh menulis kode yang tidak benar-benar diperlukan dan dapat disediakan dengan menggunakan perpustakaan yang diberikan, tetapi Anda tidak boleh menyalahgunakan perpustakaan standar juga
Haagenti

Whery keren! Thnx!
Booharin

46

Margin tersebut dapat dicapai dengan menetapkan leftView/ rightViewke UITextField.

Diperbarui Untuk 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

Saya baru saja menambahkan / menempatkan UIView kiri dan kanan bidang teks. Jadi sekarang pengetikan akan dimulai setelah tampilan.

Terima kasih

Semoga ini bisa membantu ...


1
jika seseorang diperlukan dalam "objektif c" di sini adalah kode, UIView * paddingView = [[alokasi UIView] initWithFrame: CGRectMake (0, 0, 15, self. userNameTxtFldOutlet.frame.size.height)]; diri. userNameTxtFldOutlet.leftView = paddingView; diri. userNameTxtFldOutlet.leftViewMode = UITextFieldViewModeAlways;
Avaan

1
Solusi ini jauh lebih bersih daripada subclassing yang disebutkan di atas. Subklas harus dihindari sebisa mungkin. Saya sarankan membaca berikut krakendev.io/blog/subclassing-can-suck-and-heres-why
Sylvain

33

Swift 4, Xcode 9

Saya suka jawaban Pheepster , tetapi bagaimana kalau kita melakukan semuanya dari ekstensi, tanpa memerlukan kode VC atau subclassing:

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

Akan lebih aman untuk melakukannyarightView?.frame.size.width ?? 0
Tal

Itu mungkin. Saya, bagi diri saya sendiri, jangan pernah memanggil rajin rajin sehingga tidak mengganggu saya.
Teodor Ciuraru

1
Guys, saya memodifikasi nama metode dari paddingLeftke paddingLeftCustomdan yang lain juga. Jika saya belum melakukan ini, bug yang mengikuti saya dua minggu akan muncul ketika Anda menggunakan Tampilan yang memiliki UITextView (seperti UISearchBar). Hanya ... jangan mengatur nama standar.
Teodor Ciuraru

17

di Swift 4.2 dan Xcode 10

Awalnya bidang teks saya seperti ini.

masukkan deskripsi gambar di sini

Setelah menambahkan padding di sisi kiri bidang teks saya ...

masukkan deskripsi gambar di sini

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

Seperti ini kita dapat membuat sisi kanan juga. (TextFieldName.rightViewMode = .always)

Jika Anda ingin kode jenis SharedInstance (Tulis sekali pakai setiap perangkat) lihat kode di bawah ini.

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

    }
}

Sekarang panggil fungsi ini seperti ini.

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

2
Bukankah ekstensi seharusnya bekerja lebih baik daripada memperkenalkan kelas bersama untuk tugas sekecil itu?
Sharkes Monken

@ Sharkes Monken, saya tidak mengerti
iOS

@ Sharkes Monken, bisakah Anda menjelaskannya untuk saya. Terima kasih.
iOS

1
Saya pikir itu berarti ekstensi UITextField untuk fungsi, singleton untuk fungsi pembantu ini tidak baik
logan.Nguyen

14

Solusi sederhana cepat 3 - tambahkan kode ke viewDidLoad:

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

Tidak perlu kode yang sangat panjang


Ini tidak berfungsi untuk UITextField di dalam UISearchBar. :( Saya perlu solusi yang bekerja secara khusus dalam kasus itu :(
Miki

@livtay Ini tidak akan berfungsi saat Anda menggunakan clearButtonMode atau ingin memiliki tampilan kiri, dll. Ini adalah kemenangan cepat, tetapi hanya perhatikan lubang yang Anda tuju.
Haagenti

13

Gunakan ekstensi Swift 5 saya yang sudah teruji:

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

Cara Penggunaan

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

Anggun. Terima kasih.
Carlo

@Carlo Grazie mille Carlo :)
Fabio

10

Untuk membuat tampilan padding untuk UITextField di 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

Subclassing UITextField adalah caranya. Buka taman bermain dan tambahkan kode berikut:

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

Ini hampir sempurna. Anda mungkin memiliki placeholder yang memiliki metode bijak seperti: "placeholderRectForBounds" yang juga harus Anda timpa dan apa yang Anda tambahkan sebagai x harus dikurangi dari lebar jika tidak, Anda tidak dapat melihat jenis apa saat teks melampaui panjang lapangan
Haagenti

jika dibiarkan adalah 25 lebar harus dikurangi 50 agar memiliki padding yang sama
Haagenti

7

Ini jawaban Haagenti yang diperbarui ke 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)
    }

}

Referensi: Memutakhirkan Ke Swift 4.2 .

Sunting : Akun untuk tombol hapus.


6

Buat UIView dengan ruang bantalan yang diperlukan dan tambahkan ke anggota textfield.leftView dan atur anggota textfield.leftViewMode ke 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

Masukkan kode ini di 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

Ini bekerja untuk saya :)


5

Satu baris kode ini menyelamatkan saya:

Untuk Xamarin.iOS:

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

Untuk Swift:

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

4

Jawaban ScareCrow dalam 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

Di Swift 3. Anda dapat menggunakan UITextField khusus dengan indent yang diatur dalam konstruktornya. Tidak perlu deklarasi tambahan di 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

Cara mudah: untuk melakukan ini dengan memperluas 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
       }
   }

}

Kemudian Anda dapat mengatur bantalan ke tepi mana pun dengan cara ini:

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

coba kode yang sama tetapi dengan tampilan berwarna-kiri dan kanan pada iOS 13 dan membangunnya dengan xCode 11 ....)) Anda akan terkejut tentang bagaimana textView mengubah insets dan hot itu menggerakkan pandangan ke arah ujung-ujungnya sehingga tampilan yang ditambahkan tidak sepenuhnya terlihat
Massmaker

4

Saya lebih suka menggunakan IBDesignablekelas dan IBInspectableproperti untuk memungkinkan saya mengatur padding melalui storyboard Xcode dan tetap dapat digunakan kembali. Saya juga memperbarui kode untuk berfungsi di 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

* Memperluas UITextField di 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)
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.