Створіть простір на початку поля UITextField


149

Я хочу залишити трохи місця на початку UITextField, як і тут: Додайте ліву поле до UITextField

Але я не знаю, як це зробити зі Свіфтом.


ну, ви не можете підкласові швидкі об'єкти в Objective-C, але ви можете це зробити навпаки ... Тож я здогадуюсь, ви просто коригуєте відповідь і комбінуєте її з: developer.apple.com/library/prerelease/ ios / документація / Swift /…
— Граді Гравець

1
Це, мабуть, не найкраще рішення, але ви можете зробити uiview * paddingView і зробити UITextField.leftView = paddingView. тому надайте поданню оббивки потрібну ширину.
— ipalibowhyte

1
вид накладки буде просто ванільним UIView, який має ширину, яку ви хотіли б
— Grady Player

Для Swift 5: textField.layoutMargins.left = 20
— Олександр

Відповіді:


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

Чому ви подвоюєте верхню та ліву вставки під час обчислення ширини та висоти? Не треба цього робити. Ви повинні додати дві відповідні вставки разом і відняти загальну суму від початкових меж. Або просто відняти обидва в послідовності.
— Еш

1
@ Mr.UB Перевірте, якою платформою є поточний пристрій, і на основі цього створіть різні накладки. stackoverflow.com/questions/4567728/… . Можливо, з чимось подібним
— Хаагенті

Apple забезпечує еквівалент newBoundsметоду UIEdgeInsetsInsetRectфункцією. Замість цього return self.newBounds(bounds)ви можете використовувати return UIEdgeInsetsInsetRect(bounds, padding)та видалити newBoundsметод.
— Мобільний

Якщо у вашому текстовому полі є кілька рядків, це робить текст-заповнювач центром і випереджає textAlignment = .left and contentVerticalAlignment = .top
— Code Wiget

@Ryan Минув час, але UITextField - це однолінійний лише я думав. Тоді UITextView слід використовувати для багаторядкових.
— Хаагенті

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 (зліва: 10, право: 10). Обидва парами, необов’язкові, отже, якщо ви пройдете
— нульову накладку,

4
Чудово! Але якщо ви встановите textField.clearButtonMode = .always, вам потрібно встановити лише ліву підкладку. Права накладка перемістить кнопку очищення вправо.
— Пітер Крейнц

2
Одне спостереження. Це більше схоже на провідні / задні підкладки. Але, дивно, що він відповідає на вирівнювання тексту в текстовому полі !! не напрямок мови програми.
— хасан

як встановити в UILabel?
— Невинний

Чудово! Працює як для основного тексту, так і для заповнювача.
— Акаш Bhardwaj

70

X, Y, Z - бажані значення

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

10
Здається, це не працює з textField.clearButtonMode = UITextFieldViewMode.Always - кнопка очищення також переміщена вправо
— CaptainProton

1
Не працює, коли потрібно відобразити кнопку «Очистити» ... також переміщується кнопка «Очистити».
— xdev

Цей анвер короткий, але не повний і може вийти пізніше. @ Адріан у вас є чудовий момент, але це не спосіб. Причина, що ви робите це з підкласом, - це для всіх кращих випадків. Цей код, ймовірно, вийде з ладу перед рішенням підкласу. Але ви праві, що не слід писати код, який не є строго необхідним, і його можна надати, використовуючи дані бібліотеки, але ви також не повинні зловживати стандартними бібліотеками
— Haagenti

Вері круто! Thnx!
— Бухарін

46

Такий запас може бути досягнутий шляхом встановлення leftView/ rightViewдо UITextField.

Оновлено для 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

Я щойно додав / розмістив UIView ліву та праву частину текстового поля. Тож тепер друк почнеться після перегляду.

Дякую

Сподіваюся, що це допомогло ...


1
якщо комусь потрібен "об'єктивний c" тут код, UIView * paddingView = [[UIView alloc] initWithFrame: CGRectMake (0, 0, 15, самоврядування. 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
— Тал

Це могло б. Я для себе ніколи не дзвоню геттеру, щоб це мене не турбувало.
— Теодор Цюрару

1
Хлопці, я змінив імена методів з paddingLeftна paddingLeftCustomі інші теж. Якщо я цього не зробив, помилка, яка пішла за мною два тижні, з’явилася б, коли ви використовували Перегляди, які мають UITextView (наприклад, UISearchBar). Просто ... не встановлюйте імена за замовчуванням.
— Теодор Цюрару

17

у Swift 4.2 та Xcode 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 =. Завжди)

Якщо ви хочете код типу 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

@ Sharkes Monken, я не розумію
— iOS

@ Шаркс Монкен, можете мені пояснити, будь ласка. Дякую.
— iOS

1
Я думаю, що це означає розширення UITextField для функції, синглтон для цього помічника функція не годиться
— logan.Nguyen

14

Просте рішення швидкого доступу 3 - додайте код до viewDidLoad:

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

Немає необхідності в смішно довгому коді


Це не працює для UITextField всередині UISearchBar. :( Мені потрібне рішення, яке спеціально працює в такому випадку :(
— 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 :)
— Фабіо

Елегантний. Дякую.
— Карло

@Carlo Grazie mille Carlo :)
— Фабіо

10

Щоб створити подання прокладки для UITextField у 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

Підкласифікація 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, слід відняти від ширини, інакше ви не можете бачити, який тип, коли текст виходить за межі довжини поле
— Хаагенті

якщо ліворуч - 25, ширина повинна бути мінус 50, щоб мати рівну підкладку
— Хаагенті

7

Ось відповідь Хаагенті оновлена ​​до 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)
    }

}

Довідка: Оновлення до 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);

Для Swift:

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

4

Відповідь ScareCrow у 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

У 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

* Розширення UITextField у 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)
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.