2

I have an UITextField component which has an icon on the right side of it. Icon is just an UIImageView. I'm trying to give inset to UIImageView with below code

imageView.image = UIImage(named: "example")?.withAlignmentRectInsets(UIEdgeInsets(top: -4, left: 0, bottom: -4, right: 0))

However, It doesn't work cuz It's frame hasn't been set when setting Its' Image. I'm giving Its frame with below code;

iconImageView.frame = CGRect(
            x: bounds.size.width - iconWidth - iconMarginLeft,
            y: bounds.size.height - textHeight() - iconMarginBottom,
            width: iconWidth,
            height: textHeight()
        )

and how I setup UIImageView

fileprivate func createIconImageView() {
    let iconImageView = UIImageView()
    iconImageView.backgroundColor = .clear
    iconImageView.contentMode = .scaleAspectFill
    iconImageView.autoresizingMask = [.flexibleTopMargin, .flexibleRightMargin]
    if (hasToolTip) {
        let tapGesture = UITapGestureRecognizer(target: self, action:#selector(toolTipTapped(_:)))
        iconImageView.addGestureRecognizer(tapGesture)
        iconImageView.isUserInteractionEnabled = true
        let image = UIImage(named: "infotooltip")
        image?.accessibilityIdentifier = "tooltipImage"
        iconImageView.image = image!
        changeIconAlphaToOne()
        self.iconImageView = iconImageView
    } else {
       self.iconImageView = iconImageView
        changeIconAlphaToZero()
    }
    addSubview(iconImageView)
}

My problem is that, I need to give UIEdgeInset to the image. However, because I'm trying to give it before setting the frame, It doesn't work. How can I achieve this?

I also try to resize the image by referencing below post but doesn't work for me. I also DO NOT want to put it inside a content view which will make my component class more complicated. The simplest way to resize an UIImage?

Emre Önder
  • 2,408
  • 2
  • 23
  • 73

0 Answers0