uitextfield add image swift 5
Useing example: let textView = BaseTextField() textView.rightImage = "magnifyingglass" // Add this to your project //MARK: - CustomTextView leftImage, rightImage 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.applyImage(rightImage!, false) self.setHPad = { return UIEdgeInsets( top: 0, left: 8, bottom: 0, right: 30 ) }() } } } @IBInspectable open var leftImage:String? { didSet { if (leftImage != nil) { self.applyImage(leftImage!, true) self.setHPad = { return UIEdgeInsets( top: 0, left: 30, bottom: 0, right: 8 ) }() } } } fileprivate func applyImage(_ image: String, _ isLeftImage: Bool) { // 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 let horizontalConstraint: String = isLeftImage ? "H:|-(none)-[imageHolder]-(>=default)-|" : "H:|-(>=default)-[imageHolder]-(none)-|" // set horizontal constraints self.addConstraints( NSLayoutConstraint.constraints(withVisualFormat: horizontalConstraint, options: [], metrics: metrics, views: viewsDictionary)) // set vertical constraints self.addConstraints( NSLayoutConstraint.constraints(withVisualFormat: "V:|-(none)-[imageHolder]-(none)-|", options: [], metrics: metrics, views: viewsDictionary)) } }