Я постараюсь быть настолько быстрым, насколько смогу. У меня есть основное представление с контейнером высотой 0, и всякий раз, когда клавиатура включена, я устанавливаю контейнер на ту же высоту, что и клавиатура, и у меня есть кнопка и поле электронной почты, и я установил ограничения для этого контейнера, в основном подталкивание элементов вверх. Я настроил клавиатуру на включение при загрузке представления, и она нормально работает с основным видом, но как только я нажимаю кнопку для перехода к следующему представлению, клавиатура открывается, но кнопки и поле электронной почты остаются за клавиатурой. потому что ограничения не работают, но когда я нажимаю кнопку «Домой», закрываю приложение (не из фона) и снова открываю его, ограничения работают нормально. Это происходит только тогда, когда я встраиваю навигационный контроллер в основной вид, в противном случае он отлично работает. Любые идеи?
У меня один и тот же код в обоих представлениях. P.S. Извините за длинное сообщение, не знал как объяснить.
@IBOutlet weak var emailTF: UITextField!
@IBOutlet weak var bottomHeight: NSLayoutConstraint!`
override func viewWillAppear(_ animated: Bool)
{
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil
)
// Show keyboard by default
emailTF.becomeFirstResponder()
}
@objc func keyboardWillShow(_ notification: Notification)
{
if let userInfo = notification.userInfo
{
if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue
{
bottomHeight.constant = keyboardSize.height
view.setNeedsLayout()
}
}
}
Обновление: я нашел часть проблемы. При загрузке второго представления мне не удалось получить высоту клавиатуры, я изменил код второго представления с «viewWillAppear» на «viewDidAppear», сделав контейнер таким же, как высота клавиатуры, НО есть еще одна проблема. Когда я загружаю первый вид, я получаю высоту клавиатуры 271 (что правильно), когда я перехожу ко второму виду, высота клавиатуры по какой-то причине составляет 226, заставляя текстовое поле перемещаться на 45. То же самое происходит, когда я нажимаю кнопку Кнопка «Назад», чтобы вернуться от второго представления к первому, высота клавиатуры — 226. Когда я нажимаю кнопку «Домой» и снова открываю приложение, не имеет значения, на каком экране я нахожусь, я получаю высоту клавиатуры 271, что является правильной высотой. . Что я делаю неправильно?
Обновление 2: РЕШЕНО!
Поскольку мой код работал только без навигационного контроллера, у меня было ощущение, что это что-то с быстрой анимацией и переходом, которые имел навигационный контроллер, и это мешало чтению кода перед загрузкой, поэтому я попытался написать эту строку кода emailTF.resignFirstResponder()
к моему действию кнопки, и это сработало! Так что в основном мне приходилось убирать клавиатуру, прежде чем загружать ее в следующем представлении. Надеюсь, я помог некоторым пользователям, у которых возникла такая же проблема.