viewIsAppearing is available in iOS 13 and above, and I understand that setting the layout in this lifecycle is a good way to do it. But when I use it, confirmed that UIKeyboardLayout does not work properly in viewIsAppearing in iOS versions lower than 16.0.
There is a small problem not only with viewIsAppearing, but also with viewDidLoad().
In viewDidLoad(), the component to which UIKeyboardLayoutGuide is applied is visible when the screen first appears. However, there is a problem where the layout with UIKeyboardLayoutGuide applied is not visible when returning after changing the navigation screen (Push & Pop).
I confirmed that UIKeyboardLayoutGuide is applied properly in viewIsAppearing and viewDidLoad in iOS 16.0 and higher versions.
Below is the code and environment for reproducing the problem situation.
====================================================
Envirionment: M1 Pro(Sonoma v14.5), Xcode(v15.4), iPhone Simulator (iOS v15.0, v15.2)
import UIKit
import SnapKit
final class ViewController: UIViewController {
private let uiTextField: UITextField = {
$0.placeholder = "search"
$0.backgroundColor = .red
return $0
}(UITextField())
override func viewIsAppearing(_ animated: Bool) {
super.viewIsAppearing(animated)
view.backgroundColor = .white
layout()
}
private func layout() {
view.addSubview(uiTextField)
uiTextField.snp.makeConstraints {
$0.height.equalTo(50)
$0.horizontalEdges.equalToSuperview()
$0.bottom.equalTo(view.keyboardLayoutGuide.snp.top)
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
view.endEditing(true)
}
}
I wonder if I haven't checked what I need to check yet, or if there are other problems.