Альфа-представления и свойства фрейма портятся при первом изменении ответчика UITextFields - PullRequest
0 голосов
/ 18 мая 2018

У меня есть представление (Позволяет называться thirdStackView) и два textfield (Позволяет называть их текстовым полем b и c).

В моем viewdidload я ставлю их якоря и делаю текстовые поля альфа в 0, а также y фрейм текстовых полей в -100.Одним нажатием кнопки я перемещаю thirdstachview с экрана с анимацией, делаю видимыми текстовые поля и делаю их рамку +100.

Моя проблема в том, что когда я изменяю текстовое поле, thirdstackview начинает появляться на экране, и позиции текстовых полей возвращаются к тем, которые я дал в viewdidload.Также, когда я отклоняю клавиатуру, возникает эта проблема.

Я думаю, это что-то вроде layoutIfneeded(), но в чем может быть проблема?

override func viewDidLoad() {
    thirdStackView.anchor(self.btnStackView.bottomAnchor, left: self.view.leftAnchor, bottom: self.emergenyBtn.topAnchor, right: self.view.rightAnchor, topConstant: 20, leftConstant: 20, bottomConstant: 13, rightConstant: 20, widthConstant: 0, heightConstant: 0)

    self.createTextField(placeHolderText: getLabelText(key: CMSKeys.CMS_TF_TCKNID), titleText: getLabelText(key: CMSKeys.CMS_TF_TCKNID), imageName: "id-icon",leftButtons: [.backDisabled,.forward], rightButtons: [.cancel],textField: idTextField)
    idTextField.tag = 1
    idTextField.keyboardType = UIKeyboardType.numberPad
    idTextField.anchor(self.btnStackView.bottomAnchor, left: self.view.leftAnchor, bottom: nil, right: self.view.rightAnchor, topConstant: 20, leftConstant: 30, bottomConstant: 0, rightConstant: 30, widthConstant: 0, heightConstant: 40)
    idTextField.alpha = 0
    self.createTextField(placeHolderText: getLabelText(key: CMSKeys.CMS_TF_PHONE), titleText: getLabelText(key: CMSKeys.CMS_TF_PHONE), imageName: "phone-icon",leftButtons: [.back,.forward], rightButtons: [.cancel],textField: phoneTextField)
    phoneTextField.keyboardType = UIKeyboardType.numberPad
    phoneTextField.tag = 2
    phoneTextField.anchor(idTextField.bottomAnchor, left: self.view.leftAnchor, bottom: nil, right: self.view.rightAnchor, topConstant: 20, leftConstant: 30, bottomConstant: 0, rightConstant: 30, widthConstant: 0, heightConstant: 40)
    phoneTextField.alpha = 0
}

Моя функция анимации;

@objc func adminBtnTapped(_ button: UIButton) {
    if(btnTapped){
        UIView.transition(with: button, duration: 0.5, options: .transitionCrossDissolve, animations: {
            self.emergenyBtn.frame.origin.y -= 20
        }, completion: nil)

        UIView.animate(withDuration: 1, animations: {
            self.thirdStackView.frame.origin.y += self.view.bounds.height

            self.bgView.frame.origin.y += self.view.bounds.height
            self.backBtn.frame.origin.x += self.view.bounds.width

            self.idTextField.frame.origin.y += 100
            self.idTextField.alpha = 1.0
            self.phoneTextField.frame.origin.y += 100
            self.phoneTextField.alpha = 1.0
            self.passTextField.frame.origin.y += 100
            self.passTextField.alpha = 1.0
        }) { (_) in
            //self.emergenyBtn.setTitle("Giriş Yap", for: UIControlState.normal)
            self.view.layoutIfNeeded()
        }
        btnTapped = false
    }
}

1 Ответ

0 голосов
/ 18 мая 2018

Когда я делаю суперпредставления "переводит атрибутAutoresizingMaskIntoConstraints" в false, это решается.Я думаю, что когда это правда, автоматические ограничения макета испортились.

self.view.translatesAutoresizingMaskIntoConstraints = false

Для гуру, что этого ответа недостаточно, вы можете проверить официальный документ Apple

https://developer.apple.com/documentation/uikit/uiview/1622572-translatesautoresizingmaskintoco

Из Apple Document

Обратите внимание, что ограничения маски авторазмера полностью определяют размер и положение вида;следовательно, вы не можете добавить дополнительные ограничения для изменения этого размера или положения без возникновения конфликтов.

...