Tạo không gian ở đầu UITextField


149

Tôi muốn để lại một chút dung lượng khi bắt đầu UITextField, giống như ở đây: Thêm lề trái vào UITextField

Nhưng tôi không biết làm thế nào với Swift.


tốt, bạn không thể phân lớp các đối tượng nhanh chóng trong Objective-C, nhưng bạn có thể làm điều đó theo cách khác ... Vì vậy, tôi đoán bạn chỉ cần điều chỉnh câu trả lời và kết hợp nó với: developer.apple.com/l Library / promelease / ios / tài liệu / Swift / Nhận
Người chơi Grady

1
Đây có lẽ không phải là giải pháp tốt nhất, nhưng bạn có thể tạo một uiview * paddingView và làm UITextField.leftView = paddingView. Vì vậy, cung cấp cho các đệm xem chiều rộng mong muốn của bạn.
ipalibowhyte

1
Chế độ xem đệm sẽ chỉ là một UIView vani có chiều rộng mà bạn muốn
Người chơi Grady

Đối với Swift 5: textField.layoutMargins.left = 20
Oleksandr

Câu trả lời:


283

Đây là những gì tôi đang sử dụng ngay bây giờ:

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

Tôi không bao giờ đặt một phần đệm khác nhưng bạn có thể điều chỉnh. Lớp này không quan tâm đến RightView và leftView trên trường văn bản. Nếu bạn muốn điều đó được xử lý chính xác, bạn có thể sử dụng một cái gì đó như (ví dụ trong objc và tôi chỉ cần quyền Xem:

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

Tại sao bạn lại nhân đôi phần trên và bên trái khi tính chiều rộng và chiều cao? Không cần phải làm điều đó. Bạn nên thêm hai phần tử có liên quan lại với nhau và trừ tổng số từ giới hạn ban đầu. Hoặc chỉ trừ cả hai trong chuỗi.
Tro

1
@ Mr.UB Kiểm tra nền tảng của thiết bị hiện tại và tạo các phần đệm khác nhau dựa trên đó. stackoverflow.com/questions/4567728/ cấp . Có lẽ với một cái gì đó như thế này
Haagenti

Apple cung cấp tương đương với newBoundsphương thức với UIEdgeInsetsInsetRectchức năng. Thay vì return self.newBounds(bounds)bạn có thể sử dụng return UIEdgeInsetsInsetRect(bounds, padding)và loại bỏ newBoundsphương pháp.
Điện thoại di động Dan

Nếu trường văn bản của bạn là nhiều dòng, điều này làm cho văn bản giữ chỗ được căn giữa và thay thế văn bản textAlocate = .left và contentV verticalAlocation = .top
Code Wiget

@Ryan Đã được một thời gian, nhưng UITextField chỉ là một dòng mà tôi nghĩ. Nên sử dụng UITextView cho multiline.
Haagenti

194

Nếu bạn sử dụng tiện ích mở rộng, không cần phải phân lớp UITextField và chức năng mới sẽ được cung cấp cho bất kỳ UITextField nào trong ứng dụng của bạ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
    }
}

Khi tôi cần đặt phần đệm của trường văn bản ở bất kỳ đâu trong ứng dụng của mình, tôi chỉ cần làm như sau:

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

Sử dụng các tiện ích mở rộng Swift, chức năng được thêm trực tiếp vào UITextField mà không cần phân lớp.

Hi vọng điêu nay co ich!


8
Giải pháp tuyệt vời, rất thanh lịch. Sự thay đổi duy nhất tôi đã thực hiện là tôi đã thêm chúng vào một chức năng để tôi nhận được một cái gì đó như textField.setPaddingFor (trái: 10, phải: 10). Cả hai thông số, đều là tùy chọn do đó nếu bạn vượt qua được thì phần đệm sẽ là 0.
Nermin Sehic

4
Tuyệt quá! Nhưng nếu bạn đặt textField.clearButtonMode = .always, bạn phải chỉ đặt phần đệm bên trái. Phần đệm bên phải sẽ di chuyển nút xóa sang bên phải.
Peter Kreinz

2
Một quan sát. Nó giống như một lớp đệm hàng đầu / dấu. Nhưng, điều kỳ lạ là nó phản ứng với việc căn chỉnh văn bản trường văn bản !! không phải là hướng ngôn ngữ ứng dụng.
hasan

Làm thế nào để thiết lập trong UILabel?
Vô tội

Tuyệt quá! Hoạt động cho văn bản chính cũng như cho trình giữ chỗ.
Akash Bhardwaj

70

X, Y, Z là các giá trị mong muốn của bạn

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

10
Điều này dường như không hoạt động với textField.clearButtonMode = UITextFieldViewMode.Always - nút xóa cũng được chuyển sang bên phải
CaptainProton

1
Không hoạt động khi nút Clear cần được hiển thị ... nút xóa cũng được di chuyển.
xdev

Anwer này ngắn nhưng không đầy đủ và có thể lỗi sau. @Adrian bạn có một điểm tuyệt vời, nhưng đây không phải là cách. Lý do bạn thực hiện nó với một lớp con là cho tất cả các trường hợp cạnh. Mã này có thể sẽ sụp đổ trước giải pháp lớp con. Nhưng bạn đã đúng rằng bạn không nên viết mã không thực sự cần thiết và có thể được cung cấp bằng cách sử dụng các thư viện đã cho, nhưng bạn cũng không nên lạm dụng các thư viện chuẩn
Haagenti

Nơi mát mẻ! Thnx!
Booharin

46

Lợi nhuận như vậy có thể đạt được bằng cách thiết lập leftView/ rightViewđến UITextField.

Cập nhật cho 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

Tôi vừa thêm / đặt một UIView bên trái và bên phải của trường văn bản. Vì vậy, bây giờ việc gõ sẽ bắt đầu sau khi xem.

Cảm ơn

Hy vọng điều này đã giúp ...


1
nếu ai đó cần trong "object c" ở đây là mã, UIView * paddingView = [[UIView alloc] initWithFrame: CGRectMake (0, 0, 15, self. userNameTxtFldOutlet.frame.size.height)]; tự. userNameTxtFldOutlet.leftView = paddingView; tự. userNameTxtFldOutlet.leftViewMode = UITextFieldViewModeAlways;
Avaan

1
Giải pháp này sạch hơn nhiều so với phân lớp được đề cập ở trên. Phân lớp nên tránh càng nhiều càng tốt. Tôi đề nghị cách đọc sau đây krakendev.io/blog/subgrouping-can-suck-and-heres-why
Sylvain

33

Swift 4, Xcode 9

Tôi thích câu trả lời của Pheepster , nhưng về cách chúng tôi thực hiện tất cả từ tiện ích mở rộng, mà không yêu cầu mã VC hoặc bất kỳ phân lớp nào:

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

Sẽ an toàn hơn để làmrightView?.frame.size.width ?? 0
Tal

Nó có thể. Tôi, đối với bản thân tôi, không bao giờ gọi cho getter để nó không làm phiền tôi.
Teodor Ciuraru

1
Guys, tôi sửa đổi tên của phương pháp từ paddingLeftđến paddingLeftCustomvà một trong những khác quá. Nếu tôi không làm điều này, một lỗi theo tôi hai tuần sẽ xuất hiện khi bạn đang sử dụng Chế độ xem có UITextView (như UISearchBar). Chỉ cần ... không đặt tên mặc định.
Teodor Ciuraru

17

trong Swift 4.2 và Xcode 10

Ban đầu trường văn bản của tôi là như thế này.

nhập mô tả hình ảnh ở đây

Sau khi thêm phần đệm ở bên trái, trường văn bản của tôi là ...

nhập mô tả hình ảnh ở đây

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

Như thế này, chúng ta cũng có thể tạo bên phải. (TextFieldName.rightViewMode = .always)

Nếu bạn muốn mã loại SharedInstance (Viết một lần sử dụng mọi kho) hãy xem mã dưới đây.

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

    }
}

Bây giờ gọi chức năng này như thế này.

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

2
Không nên mở rộng hoạt động tốt hơn thay vì giới thiệu một lớp chia sẻ cho một nhiệm vụ nhỏ như vậy?
Cá mập Monken

@ Sharkes Monken, tôi không hiểu
iOS

@ Sharkes Monken, bạn có thể vui lòng giải thích cho tôi. Cảm ơn bạn.
iOS

1
Tôi nghĩ nó có nghĩa là UITextField mở rộng cho hàm, singleton cho trình trợ giúp func này không tốt
logan.Nguyen

14

Giải pháp swift 3 đơn giản - thêm mã vào viewDidLoad:

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

Không cần mã dài vô lý


Điều này không hoạt động cho UITextField bên trong UISearchBar. :( Tôi cần giải pháp hoạt động cụ thể trong trường hợp đó :(
Miki

@livtay Điều này sẽ không hoạt động khi bạn sử dụng ClearButtonMode hoặc muốn có chế độ xem trái, v.v ... Đây là một chiến thắng nhanh chóng nhưng chỉ cần lưu ý đến lỗ hổng bạn đang gặp phải.
Haagenti

13

Sử dụng tiện ích mở rộng Swift 5 của tôi đã thử nghiệm:

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ách sử dụng

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

Thanh lịch. Cảm ơn bạn.
Carlo

@Carlo Grazie mille Carlo :)
Fabio

10

Để tạo chế độ xem đệm cho UITextField trong 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

Phân lớp UITextField là cách để đi. Mở một sân chơi và thêm mã sau đây:

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

Điều này gần như hoàn hảo. Bạn có thể có một trình giữ chỗ có một phương thức khôn ngoan như: "placeholderRectForBound" mà bạn cũng nên ghi đè và những gì bạn thêm dưới dạng x nên được trừ khỏi chiều rộng nếu không bạn không thể thấy bạn thuộc loại nào khi văn bản vượt quá độ dài lĩnh vực
Haagenti

nếu trái là 25 chiều rộng thì nên trừ 50 để có phần đệm bằng nhau
Haagenti

7

Dưới đây là câu trả lời của Haagenti được cập nhật lên 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)
    }

}

Tham khảo: Nâng cấp lên Swift 4.2 .

Chỉnh sửa : Tài khoản cho nút rõ ràng.


6

Tạo UIView với không gian đệm cần thiết và thêm nó vào thành viên textfield.leftView và đặt thành viên textfield.leftViewMode thành 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

Đặt mã này vào 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

Nó làm việc cho tôi :)


5

Một dòng mã này đã cứu tôi:

Đối với Xamarin.iOS:

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

Dành cho Swift:

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

4

Câu trả lời của ScareCrow trong 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

Trong Swift 3. Bạn có thể sử dụng UITextField tùy chỉnh với thụt lề được đặt trong hàm tạo của nó. Không cần khai báo thêm trong bộ điều khiển.

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

Cách dễ dàng: để làm điều này bằng cách mở rộng 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
       }
   }

}

Sau đó, bạn có thể đặt phần đệm cho bất kỳ cạnh nào theo cách này:

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

hãy thử cùng một mã nhưng với các chế độ xem -left- và -right- được tô màu trên iOS 13 và xây dựng nó với xCode 11 ....)) bạn sẽ ngạc nhiên về cách textView thay đổi nội dung của nó và làm nóng nó di chuyển các khung nhìn về phía các cạnh để các khung nhìn được thêm vào không thể nhìn thấy đầy đủ
Massmaker

4

Tôi thích sử dụng IBDesignablelớp và IBInspectablethuộc tính để cho phép tôi đặt phần đệm qua bảng phân cảnh Xcode và giữ cho nó có thể sử dụng lại. Tôi cũng đã cập nhật mã để hoạt động trong 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

* Mở rộng UITextField trong 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)
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.