UITextField의 시작 부분에 공간을 만듭니다.


149

UITextField의 시작 부분에 다음과 같이 약간의 공간을 남기고 싶습니다. UITextField에 왼쪽 여백 추가

그러나 Swift로 어떻게 해야하는지 모르겠습니다.


글쎄, 당신은 Objective-C에서 신속한 객체를 서브 클래스 화 할 수는 없지만 다른 방법으로 할 수는 있습니다 ... 그래서 대답을 조정하고 developer.apple.com/library/prerelease/
Grady Player

1
이것은 최선의 해결책은 아니지만 uiview * paddingView 및 do 할 수 UITextField.leftView = paddingView있습니다. 패딩 뷰에 원하는 너비를 지정하십시오.
ipalibowhyte

1
패딩 뷰는 원하는 너비를 가진 바닐라 UIView 일 것입니다
Grady Player

스위프트 5 : textField.layoutMargins.left = 20
Oleksandr

답변:


283

이것은 내가 지금 사용하고있는 것입니다 :

스위프트 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)
    }
}

스위프트 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)
    }
}

스위프트 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)
    }
}

다른 패딩을 설정하지는 않지만 조정할 수는 있습니다. 이 클래스는 텍스트 필드에서 rightView 및 leftView를 처리하지 않습니다. 올바르게 처리하려면 (objc의 예와 같이 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;
}

너비와 높이를 계산할 때 상단 및 왼쪽 삽입을 두 배로 늘리는 이유는 무엇입니까? 그렇게 할 필요는 없습니다. 두 개의 관련 삽입을 더하고 원래 범위에서 총계를 빼야합니다. 또는 순서대로 둘 다 빼십시오.
Ash

1
@ Mr.UB 현재 장치가 어떤 플랫폼인지 확인하고이를 기반으로 다른 패딩을 만듭니다. stackoverflow.com/questions/4567728/… . 아마도 이와 같은 것
Haagenti

Apple은이 newBounds방법과 동등한 UIEdgeInsetsInsetRect기능을 제공합니다. 대신에 메소드를 return self.newBounds(bounds)사용 return UIEdgeInsetsInsetRect(bounds, padding)하고 제거 할 수 있습니다 newBounds.
모바일 Dan

텍스트 필드가 여러 줄인 경우 자리 표시 자 텍스트가 가운데에 배치되고 textAlignment = .left 및 contentVerticalAlignment = .top
Code Wiget

@Ryan 그것은 오래되었지만 UITextField는 한 줄만 생각했습니다. 그런 다음 여러 줄에 UITextView를 사용해야합니다.
Haagenti

196

확장을 사용하는 경우 UITextField를 서브 클래 싱 할 필요가 없으며 앱의 모든 UITextField에서 새 기능을 사용할 수 있습니다.

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

응용 프로그램의 어느 곳에서나 텍스트 필드의 패딩을 설정해야 할 때 간단히 다음을 수행하십시오.

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

Swift 확장을 사용하면 서브 클래 싱없이 UITextField에 기능이 직접 추가됩니다.

도움이 되었기를 바랍니다!


8
매우 우아한 우수한 솔루션. 내가 한 유일한 변화는 textField.setPaddingFor (left : 10, right : 10)과 같은 것을 하나의 함수에 추가했다는 것입니다. 패딩은 0이 될 것입니다 전무 당신이 통과하면 두 PARAMS는, 따라서 선택 사항
Nermin Sehic을

4
큰! 그러나 textField.clearButtonMode = .always를 설정하면 왼쪽 패딩 만 설정해야합니다. 오른쪽 패딩은 지우기 단추를 오른쪽으로 이동합니다.
Peter Kreinz

2
하나의 관찰. 선행 / 트레일 링 패딩과 비슷합니다. 그러나 이상한 점은 텍스트 필드 텍스트 정렬에 응답한다는 것입니다! 앱 언어 방향이 아닙니다.
hasan

UILabel에서 설정하는 방법?
무고한

큰! 자리 표시 자뿐만 아니라 기본 텍스트에서도 작동합니다.
Akash Bhardwaj

70

X, Y, Z는 원하는 값입니다

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

10
이 textField.clearButtonMode = UITextFieldViewMode.Always와 작동하지 않는 것 - 클리어 버튼이 오른쪽으로 이동뿐만 아니라
CaptainProton

1
지우기 버튼을 표시해야하는 경우 작동하지 않습니다. 지우기 버튼도 이동합니다.
xdev

이 anwer는 짧지 만 완료되지 않았으며 나중에 버그가 발생할 수 있습니다. @Adrian 당신은 좋은 지적을 가지고 있지만, 이것은 방법이 아닙니다. 서브 클래스로 수행해야하는 이유는 모든 경우에 해당됩니다. 이 코드는 아마도 서브 클래스 솔루션보다 먼저 충돌 할 것입니다. 그러나 엄격하게 필요하지 않고 주어진 라이브러리를 사용하여 제공 할 수있는 코드를 작성해서는
안되지만

멋있어요! Thnx!
Booharin

46

leftView/ rightView로 설정하면 이러한 마진을 얻을 수 있습니다.UITextField .

스위프트 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

방금 추가 / 배치 UIView 텍스트 필드의 왼쪽과 오른쪽을 했습니다. 이제보기 후에 타이핑이 시작됩니다.

감사

이것이 도움이 되었기를 바랍니다 ...


1
"객관적 c"에 누군가가 필요한 코드는 다음과 같습니다. UIView * paddingView = [[UIView alloc] initWithFrame : CGRectMake (0, 0, 15, self. userNameTxtFldOutlet.frame.size.height)]; 본인. userNameTxtFldOutlet.leftView = paddingView; 본인. userNameTxtFldOutlet.leftViewMode = UITextFieldViewModeAlways;
아바 안

1
이 솔루션은 위에서 언급 한 서브 클래 싱보다 훨씬 깨끗합니다. 서브 클래 싱은 최대한 피해야합니다. 나는 krakendev.io/blog/subclassing-can-suck-and-heres-why를
Sylvain

33

스위프트 4, Xcode 9

나는 좋아한다 Pheepster의 답변을 하지만 VC 코드 또는 하위 클래스를 요구하지 않고 확장 프로그램에서 모두 수행하는 방법은 ?

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

더 안전합니다rightView?.frame.size.width ?? 0
Tal

그것은 수도. 나는 나 자신을 위해 게터를 부르지 않아서 나를 귀찮게하지 않습니다.
Teodor Ciuraru

1
얘들 아, 난에서 메소드의 이름을 수정 paddingLeftpaddingLeftCustom너무 다른 하나. 이 작업을 수행하지 않으면 UITextBar (예 : UISearchBar)가있는 뷰를 사용할 때 2 주가 지난 버그가 나타납니다. 그냥 ... 기본 이름을 설정하지 마십시오.
Teodor Ciuraru

17

에서 스위프트 4.2 엑스 코드 (10)

처음에 내 텍스트 필드는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

왼쪽에 패딩을 추가하면 내 텍스트 필드는 ...

여기에 이미지 설명을 입력하십시오

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

이와 같이 오른쪽도 만들 수 있습니다. (textFieldName.rightViewMode = .always)

SharedInstance 유형 코드를 원하면 (모든웨어를 한 번 작성하십시오) 아래 코드를 참조하십시오.

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

    }
}

이제이 함수를 이렇게 호출하십시오.

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

2
그런 사소한 작업을 위해 공유 클래스를 도입하는 것보다 확장이 더 잘 작동하지 않습니까?
Sharkes Monken 2014 년

@ Sharkes Monken, 나는 이해하지 못한다
iOS

@ Sharkes Monken, 설명해 주시겠습니까? 감사합니다.
iOS

1
나는 그것을 함수에 대한 평균 확장의 UITextField 생각이 헬퍼 FUNC를위한 싱글은 좋지 않다
logan.Nguyen

14

간단한 신속한 3 솔루션-viewDidLoad에 코드 추가 :

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

엄청나게 긴 코드 필요 없음


UISearchBar 내부의 UITextField에서는 작동하지 않습니다. :( 그 경우에 특별히 작동하는 솔루션이 필요합니다 :(
Miki

@livtay clearButtonMode를 사용하거나 leftView 등을 원할 때 작동하지 않습니다. 이것은 빠른 승리이지만 당신이가는 구멍을 알고 있습니다.
Haagenti

13

내 확장 Swift 5를 사용하여 테스트했습니다.

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

사용하는 방법

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

우아한. 감사합니다.
카를로

@Carlo Grazie mille Carlo :)
Fabio

10

Swift 5에서 UITextField의 패딩 뷰를 만들려면

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

8

UITextField를 서브 클래 싱하는 것이 좋습니다. 놀이터를 열고 다음 코드를 추가하십시오.

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

이것은 거의 완벽합니다. "placeholderRectForBounds"와 같은 현명한 방법을 사용하는 자리 표시자가있을 수 있습니다.이 자리 표시자는 재정의해야하며 x로 추가 한 내용을 너비에서 빼야합니다. 필드
Haagenti

왼쪽이 25 인 경우 동일한 패딩을 갖기 위해 너비는 빼기 50이어야합니다.
Haagenti

7

다음은 Swift 4.2로 업데이트 된 Haagenti의 답변입니다 .

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

}

참조 : Swift로 업그레이드 4.2 .

편집 : 지우기 버튼 계정.


6

필요한 패딩 공간으로 UIView를 만들고 textfield.leftView 멤버에 추가하고 textfield.leftViewMode 멤버를 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

이 코드를 당신의 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

그것은 나를 위해 작동합니다 :)


5

이 한 줄의 코드로 나를 구했습니다.

Xamarin.iOS의 경우 :

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

스위프트

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

4

Swift 3의 ScareCrow 답변

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

Swift 3에서는 생성자에 설정된 들여 쓰기와 함께 사용자 정의 UITextField를 사용할 수 있습니다. 컨트롤러에서 추가 선언이 필요하지 않습니다.

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

쉬운 방법 : 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
       }
   }

}

그런 다음이 방법으로 패딩을 모든 가장자리에 설정할 수 있습니다.

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

동일한 코드를 시도하지만 iOS 13에서 색상이 왼쪽-오른쪽-보기는 xCode 11 ....)로 빌드하면 textView가 삽입물을 변경하고 뷰를 향해 이동하는 방법에 놀랄 것입니다. 추가 된보기가 완전히 보이지 않도록 가장자리
Massmaker

4

IBDesignable클래스와 IBInspectable속성을 사용하여 Xcode 스토리 보드를 통해 패딩을 설정하고 재사용 가능하게 유지 하는 것을 선호합니다 . 또한 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

Swift 5에서 UITextField 확장

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)
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.