自动布局和底线文本字段

时间:2018-10-15 09:44:07

标签: ios swift

我已经为这些UITextField设置了约束

example

但是当我自定义文本字段时,它已经超出了约束条件

    emailTextField.backgroundColor = UIColor.clear
    emailTextField.attributedPlaceholder = NSAttributedString(string: emailTextField.placeholder!, attributes: [NSAttributedString.Key.foregroundColor: #colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)])
    emailTextField.borderStyle = .none
    emailTextField.tintColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)

    let bottomLayer = CALayer()
    bottomLayer.frame = CGRect(x: 0, y: 20, width: 1000, height: 0.7)
    bottomLayer.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    emailTextField.layer.addSublayer(bottomLayer)

运行..

run

请告诉我为什么?非常感谢...

1 个答案:

答案 0 :(得分:1)

您已将CALayer的宽度设置为1000。该宽度应为TextField的宽度。

更改以下代码:

添加以下代码以获取emailTextField的更新框架并设置Layer的宽度:

 emailTextField.setNeedsLayout()
 emailTextField.layoutIfNeeded()

bottomLayer.frame = CGRect(x: 0, y: 20, width: emailTextField.frame.size.width, height: 0.7)

更新

如果要重用此textField配置,可以创建一个如下所示的函数:

func setupTextField(textField: UITextField) {

    textField.backgroundColor = UIColor.clear
    textField.attributedPlaceholder = NSAttributedString(string: textField.placeholder!, attributes: [NSAttributedString.Key.foregroundColor: #colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)])
    textField.borderStyle = .none
    textField.tintColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)

    textField.setNeedsLayout()
    textField.layoutIfNeeded()

    let bottomLayer = CALayer()
    bottomLayer.frame = CGRect(x: 0, y: 20, width: textField.frame.size.width, height: 0.7)
    bottomLayer.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    textField.layer.addSublayer(bottomLayer)
}

您可以通过以下方式调用上述方法:

    setupTextField(textField: textField)