【问题标题】:How can I add padding to UIImageView that is inside of a rightView of a UITextField?如何向 UITextField 的 rightView 内的 UIImageView 添加填充?
【发布时间】:2021-03-12 00:07:08
【问题描述】:

所以我在 UITextField 的右侧添加了一个 UIImageView,但我需要在右侧添加一点填充,这样它就不会一直锚定到右侧。我尝试添加一个自定义框架,但没有奏效,所以我不太确定如何获得该填充。任何帮助将不胜感激。

See TextField Example Here

let titleField : UITextField = {
        let titleField = UITextField()
        titleField.placeholder = "Title"
        titleField.textAlignment = .center
        titleField.backgroundColor = .white
        titleField.addDoneCancelToolbar()
        
        var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
        let image = UIImage(systemName: "exclamationmark.circle")?.withTintColor(.systemRed, renderingMode: .alwaysOriginal)
        imageView.image = image
        titleField.rightView = imageView
        titleField.rightViewMode = .always
//        titleField.rightView?.isHidden = true
        
        return titleField
    }()

【问题讨论】:

标签: ios swift uiimageview uitextfield


【解决方案1】:

只需添加扩展名:

extension UITextField {
    func rightImage(_ image: UIImage?, imageWidth: CGFloat, padding: CGFloat) {
        let imageView = UIImageView()
        imageView.frame = CGRect(x: padding + 2, y: 0, width: imageWidth, height: frame.height)
        imageView.contentMode = .scaleAspectFit
        imageView.image = image
        let containerView = UIView(frame: CGRect(x: 0, y: 0, width: imageWidth + padding , height: frame.height))
        containerView.addSubview(imageView)
        rightView = containerView
        rightViewMode = .always
    }
}

使用它:

if let image = UIImage(named: imagename + ".png") {
    titlefield.rightImage(image, imageWidth: 30, padding: 5)
}

【讨论】:

    【解决方案2】: