如何创建带有内联验证错误的 UITextField?

问题描述 投票:0回答:1

我正在尝试构建一个自定义 UITextField,它在文本字段下方内嵌显示验证错误,类似于材料设计。当我出现错误时,我懒惰地添加 UILabel 并限制到文本字段

    private lazy var errorLabel: UILabel = {
        let label = UILabel()
        label.font = UIFont.systemFont(ofSize: 14, weight: .bold)
        label.textColor = errorColor
        label.numberOfLines = 0
        label.isHidden = true
        return label
    }()

    open override func didMoveToSuperview() {
        super.didMoveToSuperview()
        
        // Make sure that errorLabel is added once to the superview, not to the text field itself
        if let superview = superview, errorLabel.superview == nil {
            superview.addSubview(errorLabel)
            configureErrorLabelConstraints()
        }
    }

    private func configureErrorLabelConstraints() {
        errorLabel.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            errorLabel.topAnchor.constraint(equalTo: self.bottomAnchor, constant: 5),
            errorLabel.leadingAnchor.constraint(equalTo: self.leadingAnchor),
            errorLabel.trailingAnchor.constraint(equalTo: self.trailingAnchor)
        ])

    public func showInlineValidationError(message: String) {
        errorLabel.textColor = errorColor
        layer.borderColor = errorColor.cgColor
        errorLabel.text = message
        errorLabel.isHidden = false
    }
    
    public func hideInlineValidationError() {
        layer.borderColor = borderColor.cgColor
        errorLabel.isHidden = true
    }
    }

这一切都很好。我的问题是,假设我有一个 UIImage 限制在自定义文本字段下方 12 点处,当显示标签时,它不会将图像向下移动标签高度,而是减少两者之间的空间。我想要的是,如果显示标签,文本字段和图像之间的约束将增加标签占用的额外高度。我该怎么办?人工智能对我在这里能做的事情一点帮助都没有。

如果第三方库足够基础,我对它持开放态度。我只需要一个带有圆角的基本 UITextfield 和下面的错误标签可以支持我的高度变化要求

ios swift uitextfield
1个回答
0
投票

我认为这种情况下更好的方法是添加一个容器 StackView,其中垂直包含所有

textField
imageView
label

然后您只需切换

errorLabel
:

UIView.animate(withDuration: 0.3) {
    self.errorLabel.isHidden.toggle()
}

输出:

© www.soinside.com 2019 - 2024. All rights reserved.