Subviews не следует ограничениям, а отклонение клавиатуры оставляет черное пространство внизу представления - PullRequest
0 голосов
/ 05 февраля 2020

Всякий раз, когда мой root контроллер просмотра (Navigation Controller) выдвигает на мой второй V C (назовем его VC2), все подпредставления VC2: кнопки, метки и текстовые поля сдвигаются вниз, даже если я установил ограничения на это. Кроме того, всякий раз, когда я отклоняю клавиатуру после редактирования текстового поля, представление возвращается к своему предполагаемому месту, где ограничения устанавливают его, и оставляет черное пространство внизу представления. Вот мой код для VC2:

override func viewDidLoad() {
    super.viewDidLoad()
    view.layer.backgroundColor = UIColor(named: const.white)?.cgColor

    nameField.delegate = self
    emailField.delegate = self
    passField.delegate = self

    setUpTitles()
    setUpTextFields()
    setUpButton()

    addPaddingAndBorder(to: nameField)
    addPaddingAndBorder(to: emailField)
    addPaddingAndBorder(to: passField)


    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChangeView(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardIsDone(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChangeView(notification:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)

    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard(_:)))
    self.view.addGestureRecognizer(tap)

}

deinit {
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillChangeFrameNotification, object: nil)

}

@objc func keyboardWillChangeView(notification: Notification){
    view.frame.origin.y = -150 //This is temporary

}

@objc func keyboardIsDone(notification: Notification){
    view.frame.origin.y = 0

}

@objc func dismissKeyboard(_: UITapGestureRecognizer){ //Tapping outside the keyboard 
    nameField.resignFirstResponder()
    emailField.resignFirstResponder()
    passField.resignFirstResponder()

}

//Executed when hitting return key
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    nameField.resignFirstResponder()
    emailField.resignFirstResponder()
    passField.resignFirstResponder()

    view.frame.origin.y = 0

    return true

}

До:

перед

После:

после

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