UITextField подчеркивание ширины вопроса - PullRequest
0 голосов
/ 17 января 2019

У меня есть UITextField & UIButton, помещенный внутри вертикали UIStackView. Программно, я добавил UIView, чтобы служить подчеркиванием UITextField.

Проблема возникает, когда я компилирую код. Строка длиннее текстового поля. Я напечатал ширину всех объектов выше и там написано 335.

Я называю это function в viewWillAppear, и строка длиннее. Если я назову это в viewDidAppear, строка будет точной шириной UITextField, но вы можете увидеть, что кнопка и текстовое поле очень быстро мигают перед обновлением представления. Что я делаю неправильно? enter image description here enter image description here

override func viewDidLoad()  {
    super.viewDidLoad()
    observeKeyboardNotifications()
    textFieldDelegate()
    setupRegisterButton()

}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
     setupTextFields()
}

func setupTextFields() {

    emailTextField.leftViewMode = .always
    let emailIconView = UIImageView()
    emailIconView.frame = CGRect(x: 0, y: 0, width: 23, height: 17)
    emailIconView.image = UIImage(named: "icon_email")
    let bgIconView = UIView(frame: CGRect(x: 0, y: 0, width: 28, height: 17))
    bgIconView.addSubview(emailIconView)
    emailTextField.leftView = bgIconView

    emailTextField.tintColor = .white
    emailTextField.textColor = .white
    emailTextField.backgroundColor = .red
    emailTextField.borderStyle = .roundedRect
    let bottomLineEmail = CALayer()
    bottomLineEmail.frame = CGRect(x: 0, y: 29, width: emailTextField.frame.width, height: 1)
    print("Email width", emailTextField.frame.width)
    print("button width", retrievePasswordButton.frame.width)
    print("line width", bottomLineEmail.frame.width)
    bottomLineEmail.backgroundColor = UIColor.white.cgColor
    emailTextField.layer.addSublayer(bottomLineEmail)
    //emailTextField.backgroundColor = .clear
    emailTextField.attributedPlaceholder = NSAttributedString(string     : emailTextField.placeholder!,
                                                              attributes : [NSAttributedStringKey.foregroundColor: Colors.authTextFieldPlaceholderColor])
    retrievePasswordButton.isEnabled = false
    handleTextFields()
}

1 Ответ

0 голосов
/ 17 января 2019

Я проверял это лично, он работает в ViewWillLayoutSubviews

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews();
    self.setupTextFields()
}

и viewDidAppear

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    self.setupTextFields();
}

proof

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...