【问题标题】:Add padding/insets to UIImage as background of UITextField将填充/插图添加到 UIImage 作为 UITextField 的背景
【发布时间】:2021-02-09 11:13:37
【问题描述】:

我想在文本字段的右侧有一个带一点填充的三角形,目前它就在边界处:

我的代码:

class Textfield: UITextField, UITextFieldDelegate {

func setup() {
    let background = UIImage(systemName: "arrowtriangle.down.fill")
    let imageView = UIImageView(image: background)

    imageView.tintColor = .label
    self.rightViewMode = .always
    imageView.contentMode = .scaleAspectFit
    self.rightView = imageView
}
}

我怎样才能添加插图让三角形更左一点?

【问题讨论】:

    标签: ios swift uiimageview uitextfield


    【解决方案1】:

    您可以覆盖文本字段方法。像这样

    class Textfield: UITextField, UITextFieldDelegate {
        
        @IBInspectable var leftPadding : CGFloat = 0
        @IBInspectable var rightPadding : CGFloat = 10
        
        private var padding: UIEdgeInsets = UIEdgeInsets()
        
        override func awakeFromNib() {
            super.awakeFromNib()
            padding = UIEdgeInsets(top: 0, left: leftPadding, bottom: 0, right: rightPadding)
            
            setup()
        }
        
        func setup() {
            let background = UIImage(systemName: "arrowtriangle.down.fill")
            let imageView = UIImageView(image: background)
            
            imageView.tintColor = .label
            self.rightViewMode = .always
            imageView.contentMode = .scaleAspectFit
            self.rightView = imageView
        }
        
        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)
        }
        
        override func rightViewRect(forBounds bounds: CGRect) -> CGRect {
            return CGRect(x: bounds.width - 30, y: 0, width: 20 , height: bounds.height)
        }
        
        override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
            return CGRect(x: 10, y: 0, width: 20 , height: bounds.height)
        }
    }
    

    【讨论】:

    • 谢谢拉贾。我已经有前 3 个覆盖,似乎错过了 rightview rect 覆盖。
    • 在您编辑 rightViewRect 之前它起作用了,编辑后出现了问题
    • @ffritz 撤消我的回答 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多