Я создал контроллер представления с UIView, содержащим текстовое поле (Примечание: контроллер представления отображается как модальный). Когда вы нажимаете на текстовое поле, появляется клавиатура, и UIView перемещается вверх по экрану, чтобы текстовое поле не закрывалось. Однако моя цель - отобразить клавиатуру и (незатененный) UIView с самого начала, когда модальное окно впервые появляется, чего я изо всех сил пытаюсь достичь.
Я попытался вставить textField.becomeFirstResponder() в viewDidLoad, но это отображает клавиатуру без перемещения UIView в желаемое (т.е. видимое) положение. Я также пытался вставить это в viewDidAppear, но это сначала отображает UIView, затем останавливается на секунду, прежде чем отображать клавиатуру и перемещать UIView вверх в очень неудобном переходе.
Было бы здорово, если бы кто-нибудь мог дать несколько предложений по решению этой проблемы. Мой код ниже.
@IBOutlet var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .darkGray
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
//The line below will display the keyboard over the UIView, thus obscuring it.
textField.becomeFirstResponder()
}
@objc func keyboardWillShow(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRectangle = keyboardFrame.cgRectValue
let keyboardHeight = keyboardRectangle.height
}
let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
self.view.frame.origin.y = 0 - keyboardSize!.height
}
Ниже представлена визуальная ссылка.