UITextField की शुरुआत में जगह बनाएं


149

मैं UITextField की शुरुआत में थोड़ी सी जगह छोड़ना चाहता हूं, बस यहां की तरह: UhandextField से बाएं हाथ का मार्जिन जोड़ें

लेकिन मुझे नहीं पता कि स्विफ्ट के साथ ऐसा कैसे करना है।


ठीक है, आप ऑब्जेक्टिव-सी में स्विफ्ट ऑब्जेक्ट्स को उपवर्गित नहीं कर सकते हैं, लेकिन आप इसे दूसरे तरीके से कर सकते हैं ... तो मेरा अनुमान है कि आप उत्तर को समायोजित करते हैं और इसे इसके साथ जोड़ते हैं: developer.apple.com/library/prerelease/ ios / प्रलेखन / स्विफ्ट /…
ग्रेडी प्लेयर

1
यह शायद सबसे अच्छा समाधान नहीं है, लेकिन आप एक uiview * paddingView बना सकते हैं और कर सकते हैं UITextField.leftView = paddingView। इसलिए पैडिंग दृश्य को अपनी इच्छित चौड़ाई दें।
iplibowhyte

1
पैडिंग दृश्य बस एक वेनिला उविव्यू होगा जिसकी चौड़ाई आपको पसंद आएगी
ग्रैडी प्लेयर

स्विफ्ट 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)
    }
}

मैंने कभी अन्य पैडिंग सेट नहीं की, लेकिन आप ट्विक कर सकते हैं। यह वर्ग टेक्स्ट फ़ील्ड पर दाएँ दृश्य और बाएँ दृश्य का ध्यान नहीं रखता है। यदि आप चाहते हैं कि आप सही ढंग से संभाल सकें तो आप कुछ का उपयोग कर सकते हैं (उदाहरण के लिए objc और मुझे केवल सही दृश्य की आवश्यकता है:

- (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/… । संभवतः कुछ इस तरह से
हागेन्ती

ऐप्पल फ़ंक्शन के newBoundsसाथ विधि के बराबर प्रदान करता है UIEdgeInsetsInsetRect। इसके बजाय return self.newBounds(bounds)आप विधि का उपयोग return UIEdgeInsetsInsetRect(bounds, padding)और हटा सकते हैं newBounds
मोबाइल डेन

अपने पाठ क्षेत्र कई पंक्तियों है, तो इस प्लेसहोल्डर पाठ केंद्रित और अधिरेखित textAlignment = .left और contentVerticalAlignment = .top बनाता है
कोड 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)

स्विफ्ट एक्सटेंशन का उपयोग करते हुए, कार्यक्षमता को उप-लिंकिंग के बिना सीधे UITextField में जोड़ा जाता है।

उम्मीद है की यह मदद करेगा!


8
उत्कृष्ट समाधान, बहुत सुरुचिपूर्ण। मेरे द्वारा किया गया एकमात्र परिवर्तन यह था कि मैंने उन्हें एक फ़ंक्शन में जोड़ा, इसलिए मुझे textField.setPaddingFor (बाएं: 10, दाएं: 10) जैसा कुछ मिलता है। दोनों पैराम, वैकल्पिक हैं इसलिए यदि आप पास करते हैं तो गद्दी 0. होगी
नर्मिन सेहिक

4
महान! लेकिन अगर आप textField.clearButtonMode = .always सेट करते हैं, तो आपको केवल बाएं पैडिंग सेट करना होगा। दायाँ पैडिंग स्पष्ट बटन को दाईं ओर ले जाएगा।
पीटर क्रेइन्ज़

2
एक अवलोकन। यह एक अग्रणी / अनुगामी गद्दी की तरह है। लेकिन, अजीब बात यह है कि यह टेक्स्टफील्ड पाठ संरेखण के लिए प्रतिक्रिया करता है !! ऐप भाषा की दिशा नहीं।
हसन

UILabel में कैसे सेट करें?
मासूम

महान! मुख्य पाठ के साथ-साथ प्लेसहोल्डर के लिए भी काम करता है।
आकाश भारद्वाज

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

स्विफ्ट 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 आबंटित] initWithFrame: CGRectMake (0, 0, 15, स्व। स्व। userNameTxtFldOutlet.leftView = paddingView; स्व। userNameTxtFldOutlet.leftViewMode = UITextFieldViewModeAlways;
अवन

1
यह समाधान उपर्युक्त उपवर्ग की तुलना में बहुत अधिक स्वच्छ है। जितना हो सके उपवर्ग से बचना चाहिए। मैं निम्नलिखित रीडिंग krakendev.io/blog/subclassing-can-suck-and-heres-why
सिल्वेन

33

स्विफ्ट 4, एक्सकोड 9

मुझे फेपस्टर का उत्तर पसंद है , लेकिन वीसी कोड या किसी भी उपवर्ग की आवश्यकता के बिना हम विस्तार से यह सब कैसे करते हैं?

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

में स्विफ्ट 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 = .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
इस तरह के मामूली काम के लिए साझा वर्ग शुरू करने के बजाय काम को बेहतर ढंग से विस्तार नहीं देना चाहिए?
मार्केन

@ शार्क्स मोनकेन, मुझे समझ में नहीं आया
iOS

@ शार्क्स मोनकेन, क्या आप मेरे लिए इसे समझा सकते हैं। धन्यवाद।
iOS

1
मुझे लगता है कि यह फ़ंक्शन के लिए एक्सटेंशन UITextField का मतलब है, इस सहायक
कवक के

14

सरल स्विफ्ट 3 समाधान - viewDidLoad में कोड जोड़ें:

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

हास्यास्पद रूप से लंबे कोड की कोई आवश्यकता नहीं है


यह एक UISearchBar के अंदर UITextField के लिए काम नहीं करता है। :( मुझे उस समाधान की आवश्यकता है जो विशेष रूप से उस स्थिति में काम करता है :(
मिकी

@livtay यह तब काम नहीं करेगा जब आप clearButtonMode का उपयोग करते हैं या एक बाएँ दृश्य इत्यादि का उपयोग करना चाहते हैं, लेकिन यह एक त्वरित जीत है, लेकिन बस आपको उस छेद के बारे में पता होना चाहिए जिसमें आप जा रहे हैं।
Haagenti

13

मेरे परीक्षण 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 :)
फैबियो

सुरुचिपूर्ण। धन्यवाद।
कार्लो

@ कार्लो ग्रैज़ी मिल कार्लो :)
फैबियो

10

स्विफ्ट 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()

यह लगभग सही है। आपके पास संभवतः एक प्लेसहोल्डर है जिसके पास एक बुद्धिमान विधि है: "प्लेसहोल्डर रेक्टफॉरबाउंड्स" जिसे आपको ओवरराइड भी करना चाहिए और एक एक्स के रूप में जो आप जोड़ते हैं उसे चौड़ाई से घटाया जाना चाहिए अन्यथा आप यह नहीं देख सकते हैं कि जब टेक्स्ट लंबाई से परे होता है तो आप किस प्रकार देख सकते हैं मैदान
17

यदि बाईं ओर 25 की चौड़ाई के बराबर माइनस 50 होना चाहिए
हैगेंटी

7

यहाँ Haagenti का उत्तर स्विफ्ट 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)
    }

}

संदर्भ: अपग्रेड करने के लिए ४.२

संपादित करें : स्पष्ट बटन के लिए खाता।


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

स्विफ्ट 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

स्विफ्ट 3. में आप कस्टम यूआईटैक्सफिल्ड का उपयोग इंडेंट के साथ कर सकते हैं जो इसके निर्माता में सेट है। एक नियंत्रक में अतिरिक्त घोषणा की आवश्यकता नहीं है।

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 के साथ इसका निर्माण करें। किनारों को जोड़ा गया दृश्य पूरी तरह से दिखाई नहीं देता है
मासमेकर

4

मैं Xcode स्टोरीबोर्ड के माध्यम से मुझे पैडिंग सेट करने और इसे पुन: प्रयोज्य रखने की अनुमति देने के लिए IBDesignableवर्ग और IBInspectableगुणों का उपयोग करना पसंद करता हूं । मैंने स्विफ्ट 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

* स्विफ्ट 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)
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.