Swift UITextField图标位置设置

6
在 UITextField 中添加图标,可以使用以下方法:
var leftImageView = UIImageView()
leftImageView.image = leftImage
textField.leftView = leftImageView
textField.leftViewMode = UITextFieldViewMode.Always
leftImageView.frame = CGRectMake(15, 10, 15, 20)
textField.addSubview(leftImageView)

针对此问题,以下是输出结果:图像靠近文本框边界

我发现的解决方案是从上述代码中删除此代码。

textField.leftView = leftImageView

它可以正确对齐图标,但每当开始编辑文本字段时,图标会出现在文本上,如此enter image description here
我希望的输出结果是这样的:enter image description here

尝试在Swift 3.0中使用这个很酷的库:https://github.com/Sahilberi/ImageTextField - Sahil
4个回答

14

首先,您绝不能将图像作为子视图添加到标签中。仅需要设置leftView属性。

textField.addSubview(leftImageView) // Delete this line
其次,任何应用于左视图框架的x或y偏移量都将被忽略。文本字段只关心视图的大小。如果您想在图像周围添加填充,则可以使用容器视图,并将图像视图定位在其中。
let leftImageView = UIImageView()
leftImageView.image = leftImage

let leftView = UIView()
leftView.addSubview(leftImageView)

leftView.frame = CGRectMake(0, 0, 30, 20)
leftImageView.frame = CGRectMake(0, 0, 15, 20)

textField.leftView = leftView

另一种选择是创建UITextField的子类并重写leftViewRectForBounds方法。


4

根据 @hennes 的语法,Swift 中有一些语法与 CGRect 语法更改和 userNameTextField.leftViewMode = .always 缺失不同。

使用 Swift 语法,我成功地做到了这一点:

    let leftImageView = UIImageView()
    leftImageView.image = UIImage(named: "email")

    let leftView = UIView()
    leftView.addSubview(leftImageView)

    leftView.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
    leftImageView.frame = CGRect(x: 10, y: 10, width: 20, height: 20)
    userNameTextField.leftViewMode = .always
    userNameTextField.leftView = leftView

2

试试这个。也许会有帮助。

var padding: Float = 20

var envelopeView: UIImageView = UIImageView(frame: CGRectMake(padding, 0, 30, 30))
envelopeView.image = UIImage.imageNamed("comment-128.png")
envelopeView.contentMode = UIViewContentModeScaleAspectFit

var viewLeft: UIView = UIView(frame: CGRectMake(padding, 0, 30, 30))
viewLeft.addSubview(envelopeView)
textField.leftView.setFrame(envelopeView.frame)
textField.leftView = viewLeft
textField.leftViewMode = UITextFieldViewModeAlways

var viewRight: UIView = UIView(frame: CGRectMake(textField.frame.size.width - (textField.frame.size.width + 30 + padding), 0, 30, 30))
viewRight.addSubview(envelopeView)
textField.rightView.setFrame(envelopeView.frame)
textField.rightView = viewRight
textField.rightViewMode = UITextFieldViewModeAlways

1

Swift 3.1

extension UITextField
{
    enum Direction
    {
        case Left
        case Right
    }

    func AddImage(direction:Direction,imageName:String,Frame:CGRect,backgroundColor:UIColor)
    {
        let View = UIView(frame: Frame)
        View.backgroundColor = backgroundColor

        let imageView = UIImageView(frame: Frame)
        imageView.contentMode = .center
        imageView.image = UIImage(named: imageName)

        View.addSubview(imageView)

        if Direction.Left == direction
        {
            self.leftViewMode = .always
            self.leftView = View
        }
        else
        {
            self.rightViewMode = .always
            self.rightView = View
        }
    }
}

1
如何使用 @jethava yogesh - Dilip Tiwari
yourtextbox.AddImage(direction:.Left,imageName:"imageName",Frame:CGRect(x:0,y:0,width:100,height:40),backgroundColor:UIColor.red) - jethava yogesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接