Изменить высоту элемента StackView впоследствии - PullRequest
0 голосов
/ 03 марта 2020

У меня есть StackView внутри ScrollView, а внутри у меня несколько TextFields. Я хотел бы изменить одно из textField.height, когда это специфицированное c текстовое поле начинает редактироваться.

Я пробовал его внутри textFieldShouldBeginEditing, но XCode ломает height.constraint.

//delegate Methode für Password Textfield
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    switch textField {
    case passwordTextField:
        eyeButtonOne.isHidden = false
        passwordTextField.addSubview(checkLetterLabel)
        checkLetterLabel.addSubview(checkLetterImage)

        passwordTextField.addSubview(checkNumberLabel)
        checkNumberLabel.addSubview(checkNumberImage)

        passwordTextField.addSubview(checkLengthLabel)
        checkLengthLabel.addSubview(checkLengthImage)

        checkLetterLabel.topAnchor.constraint(equalTo: passwordTextField.bottomAnchor, constant: 5).isActive = true
        checkLetterLabel.leadingAnchor.constraint(equalTo: checkLetterImage.leadingAnchor, constant: 13).isActive = true

        checkLetterImage.leadingAnchor.constraint(equalTo: passwordTextField.leadingAnchor).isActive = true
        checkLetterImage.centerYAnchor.constraint(equalTo: checkLetterLabel.centerYAnchor).isActive = true
        checkLetterImage.heightAnchor.constraint(equalToConstant: 10).isActive = true
        checkLetterImage.widthAnchor.constraint(equalToConstant: 10).isActive = true

        checkNumberLabel.topAnchor.constraint(equalTo: checkLetterLabel.bottomAnchor, constant: 1).isActive = true
        checkNumberLabel.leadingAnchor.constraint(equalTo: checkNumberImage.leadingAnchor, constant: 13).isActive = true

        checkNumberImage.leadingAnchor.constraint(equalTo: passwordTextField.leadingAnchor).isActive = true
        checkNumberImage.centerYAnchor.constraint(equalTo: checkNumberLabel.centerYAnchor).isActive = true
        checkNumberImage.heightAnchor.constraint(equalToConstant: 10).isActive = true
        checkNumberImage.widthAnchor.constraint(equalToConstant: 10).isActive = true

        checkLengthLabel.topAnchor.constraint(equalTo: checkNumberLabel.bottomAnchor, constant: 1).isActive = true
        checkLengthLabel.leadingAnchor.constraint(equalTo: checkLengthImage.leadingAnchor, constant: 13).isActive = true

        checkLengthImage.leadingAnchor.constraint(equalTo: passwordTextField.leadingAnchor).isActive = true
        checkLengthImage.centerYAnchor.constraint(equalTo: checkLengthLabel.centerYAnchor).isActive = true
        checkLengthImage.heightAnchor.constraint(equalToConstant: 10).isActive = true
        checkLengthImage.widthAnchor.constraint(equalToConstant: 10).isActive = true

        passwordTextField.heightAnchor.constraint(equalToConstant: 140).isActive = true
        theStackView.layoutIfNeeded()


        break
    case passwordWiederholenTextField:
        eyeButtonTwo.isHidden = false
        break
    default:
        break
    }

    return true
}

Сейчас все элементы отображаются при passwordTextField beginsEditing, но высота не меняется ... Как вы можете видеть, я также звоню layoutIfNeeded(), но это ничего не делает ... Я бы тоже нравится иметь какую-то анимацию, ничего особенного, в конце концов она должна выглядеть гладкой.

Кто-нибудь знает, как это исправить ??

1 Ответ

1 голос
/ 03 марта 2020

Для высоты, чтобы сломать это означает, что есть еще 1 ограничение высоты, так как эта строка

 passwordTextField.heightAnchor.constraint(equalToConstant: 140).isActive = true

создала еще 1, вам нужно добавить переменную

var heCon:NSLayoutConstraint!


heCon = passwordTextField.heightAnchor.constraint(equalToConstant: 140)
heCon.isActive = true

, а затем поиграть с это константа

heCon.constant = 100
theStackView.layoutIfNeeded()
...