uitextfield right view image padding swift code example

Example: uitextfield add right image swift 5

Swift 5
// Example:
let textView = BaseTextField()
// set right image
textView.rightImage = "magnifyingglass"

//MARK: - CustomTextView
class BaseTextField: UITextField {
    
    var setHPad: UIEdgeInsets = { return UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8 ) }()

    override open func textRect( forBounds bounds: CGRect ) -> CGRect {
        return bounds.inset( by: self.setHPad )
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: self.setHPad )
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: self.setHPad )
    }

    @IBInspectable open var rightImage:String? {
        didSet {
            if (rightImage != nil) {
                self.applyRightImage(rightImage!)
                self.setHPad = { return UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 30 ) }()
            }
        }
    }


    fileprivate func applyRightImage(_ image: String) {
        // set image
        let imageView = UIImageView()
        imageView.image = UIImage( systemName: image )
        imageView.tintColor = UIColor(named: K.EpColors.black)
        imageView.clipsToBounds = true
        
        // set holder
        let viewHolder = UIView()
        viewHolder.clipsToBounds = true
        viewHolder.addSubview(imageView)

        // prepare for constraints
        imageView.translatesAutoresizingMaskIntoConstraints = false
        viewHolder.translatesAutoresizingMaskIntoConstraints = false
        
        // views param
        let viewsDictionary = [
            "imageHolder": viewHolder,
            "image":imageView
        ]
        
        let metrics = [
            "default": 8,
            "none": 0
        ]
        
        // set horisontal constraints
        viewHolder.addConstraints(
            NSLayoutConstraint.constraints(withVisualFormat: "H:|-(default)-[image]-(default)-|",
                                           options: [],
                                           metrics: metrics,
                                           views: viewsDictionary))
        
        // set vertical constraints
        viewHolder.addConstraints(
            NSLayoutConstraint.constraints(withVisualFormat: "V:|-(default)-[image]-(default)-|",
                                           options: [],
                                           metrics: metrics,
                                           views: viewsDictionary))
        // add image to textfield
        self.addSubview(viewHolder)
        
        // keep childView from overflowing
        self.clipsToBounds = true
        
        // set horizontal constraints
        self.addConstraints(
            NSLayoutConstraint.constraints(withVisualFormat: "H:|-(>=default)-[imageHolder]-(none)-|",
                                           options: [],
                                           metrics: metrics,
                                           views: viewsDictionary))
        // set vertical constraints
        self.addConstraints(
            NSLayoutConstraint.constraints(withVisualFormat: "V:|-(none)-[imageHolder]-(none)-|",
                                           options: [],
                                           metrics: metrics,
                                           views: viewsDictionary))

    }
}