У меня есть 2 раскадровки: Onboarding и Main. Все отлично работает, насколько выполнение идет. Проблема в том, что у меня в начале экрана Main.storyboard отображается экран загрузки, который выглядит по-разному в зависимости от запуска раскадровки.
Сценарий 1. Новый пользователь запускает приложение, проходит через Onboarding.storyboard, затем запускается Main.storyboard и экран загрузки выглядит следующим образом: Правильный экран
Сценарий 2: пользователь запускает приложение во второй раз, поэтому Onboarding.storyboard не запускается: экран загрузки смещен от центра как это: Неправильный экран
Короче говоря: если нет Onboarding.storyboard, он выглядит неправильно. Проблема отображается только на iPad. портрет выглядит нормально.
Весь мой код экрана загрузки находится внутри моего первого контроллера представления Main.Storyboard, поэтому я предполагаю, что проблема заключается в порядке, в котором этот код вызывается?
Onboarding.Storyboard имеет только 1 контроллер вида Main.Storyboard: TabBarController -> NavController -> FirstV C
Я поместил ниже свой код SceneDelegate вместе с кодом экрана загрузки FirstV C.
Если вы хотите углубиться, я использую RevealingSplashView, доступный на github. Поскольку я не думаю, что это проблема, я не стал вдаваться в подробности.
SceneDelegate:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene
let onboardingStoryboard = UIStoryboard(name: "Onboarding", bundle: nil)
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
var vc: UIViewController
if UserDefaults.standard.value(forKey: "firstTimer") == nil {
vc = onboardingStoryboard.instantiateInitialViewController()!
} else {
vc = mainStoryboard.instantiateInitialViewController()!
}
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()
}
FirstV C соответствующий код:
class firstVC: UIViewController {
var revealingSplashView : RevealingSplashView!
override func viewDidLoad() {
super.viewDidLoad()
showLoadingScreen()
}
func showLoadingScreen() {
revealingSplashView = RevealingSplashView(iconImage: UIImage(named: "Icon")!, iconInitialSize: CGSize(width: 150, height: 150), backgroundImage: UIImage(named: "loadBackground")!)
revealingSplashView.animationType = .heartBeat
revealingSplashView.startAnimation()
view.addSubview(revealingSplashView)
}