Swift 4.0文本中的自定义UITextField在编辑时重叠

时间:2018-05-15 15:36:08

标签: swift uitextfield

我正在尝试为用户名和密码创建textField。 到目前为止,这是我所取得的成就: Current View on iPhone

然而,在编辑时,一切都很好。但后来我再次尝试编辑,这发生了。 The previous text shifted place back to the origin

以下是textfield的代码

@IBDesignable class StandardInputTextField: UITextField {
    let kInset = Constants.buttonTitleInset
    @IBInspectable var leftImage: UIImage? {
        didSet {
            updateView()
        }
    }

    @IBInspectable var leftPadding: CGFloat = 0 {
        didSet {
            updateView()
        }
    }

    fileprivate func updateView() {
        layer.borderColor = UIColor.clear.cgColor
        if let leftImage = leftImage {
            leftViewMode = .always

            let imageView = UIImageView(image: leftImage)

            if frame.height >= 20 {
                imageView.frame = CGRect(x: kInset, 
                y: kInset / 2.0, 
                width: frame.height - 2 * kInset, 
                height: frame.height - 2 * kInset)
            } else {
                imageView.frame = CGRect(x: 0, y: 0,
                width: frame.height, 
                height: frame.height)
            }

            var containerWidth = 
            imageView.frame.width + 2 * kInset

            if borderStyle == .none || 
            borderStyle == .line {
                containerWidth += 5
            }

            let imageViewContainer = UIView(frame:
            CGRect(x: 0, y: 0, 
            width: containerWidth, 
            height: imageView.frame.height + 2 * kInset))
            imageViewContainer.addSubview(imageView)
            leftView = imageViewContainer
        } else {
            leftViewMode = .never
        }
    }

    override func draw(_ rect: CGRect) {
        super.drawText(in: rect)

        if leftViewMode == .always {
            guard let leftViewRect = leftView?.frame else {
                return
            }

            let linePath = UIBezierPath()
            linePath.move(to: 
            CGPoint(x: leftViewRect.minX,y: rect.maxY))
            linePath.addLine(to: 
            CGPoint(x: rect.maxX, y: rect.maxY))
            Colors.ButtonColor.set()
            linePath.lineWidth = 2.0
            linePath.stroke()
        }
    }
}

这是否发生在任何人身上?以及如何解决这个问题?非常感谢。

1 个答案:

答案 0 :(得分:0)

显然,当我这样做时会发生这种情况:

override func draw(_ rect: CGRect) {
    super.draw(rect)
}

所以解决方案就是删除

super.draw(rect)

那就是它,享受