Попытка переместить вид при появлении клавиатуры - некоторые ошибки - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь переместить весь вид вверх, чтобы увидеть, что пользователь печатает в текстовом поле.Тем не менее, он работает отлично с первого раза, как я хочу.Однако, нажимая клавишу возврата на клавиатуре (чтобы закрыть ее), а затем нажимая на текстовое поле, я слегка перемещаю клавиатуру над текстовым полем и не получаю те же результаты, что и в первый раз.Почему это?

Это мой код:

@IBOutlet weak var commentTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    commentTextField.delegate = self

    //Keyboard listeners
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardDidHide, object: nil)
}

@objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if self.view.frame.origin.y == 0 {
            self.view.frame.origin.y -= keyboardSize.height
        }
    }
}

@objc func keyboardWillHide(notification: NSNotification) {
    if self.view.frame.origin.y != 0 {
        self.view.frame.origin.y = 0
    }
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    commentTextField.resignFirstResponder()
    return true
}    

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Вы неправильно вызываете переменную.

UIKeyboardFrameBeginUserInfoKey

Ключ для объекта NSValue, содержащего CGRect, который идентифицирует прямоугольник начального кадраклавиатура в экранных координатах.Прямоугольник рамки отражает текущую ориентацию устройства.

UIKeyboardFrameEndUserInfoKey

Ключ для объекта NSValue, содержащего CGRect, который идентифицирует окончание рамка прямоугольника клавиатуры в экранных координатах.Прямоугольник рамки отражает текущую ориентацию устройства.

Следовательно, вам нужно проверить UIKeyboardFrameEndUserInfoKey вместо UIKeyboardFrameBeginUserInfoKey.

Выполнить подстановку иВы можете решить это.

0 голосов
/ 24 февраля 2019

Заменить

UIKeyboardFrameBeginUserInfoKey

на

UIKeyboardFrameEndUserInfoKey
...