#ios #swift #xcode
#iOS #swift #xcode
Вопрос:
итак, у меня есть эта раскадровка, и я хочу, чтобы пользователю был показан контроллер представления входа, если он не вошел в систему, или контроллер представления вкладок в противном случае. это мой код внутри делегата приложения :
`
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FirebaseApp.configure()
UITabBar.appearance().tintColor = .white
// check user
let authListener = Auth.auth().addStateDidChangeListener { auth, user in
if user != nil {
print("USER IS NOT NIL")
userService.observeUserProfile(uid: user!.uid) { userProfile in
userService.currentUserProfile = userProfile
}
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "TabBarVC") as! UITabBarController
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()
} else {
print("USER IS NIL")
userService.currentUserProfile = nil
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "FirstVC") as! UIViewController
vc.modalPresentationStyle = .fullScreen
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()
}
}
}
`
Моя проблема в том, что если пользователь не зарегистрирован, это выглядит так:
Как вы можете видеть, представление не полноэкранное, хотя я указал это в делегате приложения, чтобы пользователь мог просто отклонить его и перейти на главный экран. Также на вкладке view controller у меня есть главный экран с воспроизводимым видео, а на экране входа в систему также отображается воспроизводимое видео в фоновом режиме, и оба видео воспроизводятся одновременно XD.Любые советы будут приветствоваться.
Комментарии:
1. Одна из проблем, которую я могу заметить сразу, заключается в том, что ваша текущая логика обнаружения пользователя является асинхронной, что означает, что для ее завершения требуется время… Даже если это не корень вашей проблемы, это определенно то, что вы можете рассмотреть возможность изменения.
2. спасибо, теперь я понимаю, почему у меня были некоторые проблемы.. как я могу сделать его синхронным?
3. На этот вопрос нет единого «правильного» ответа, поскольку это зависит от множества факторов. Общий подход заключается в попытке «автоматического входа в систему», отображении некоторой формы индикатора загрузки, а затем принятии решения о получении ответа от вашей службы аутентификации.
Ответ №1:
изменить раскадровку -> viewcontroller —> инспектор атрибутов —> изменить представление с автоматического на полноэкранный режим
Ответ №2:
let nav = UINavigationController()
nav.navigationBar.isHidden = true
//your Controller
let first = Router.shared.splashVC()
let third = Router.shared.CustomTabbarVC()
third.selectedIndex = 0
//add multiple controller in array
nav.viewControllers = [first,third]
UIApplication.shared.keyWindow?.rootViewController = nav
UIApplication.shared.keyWindow?.makeKeyAndVisible()
Ответ №3:
Сначала выберите all ViewController и автоматически измените режим представления из полноэкранного режима в смоделированных показателях.
Добавлен UINavigationController в RootViewController
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "TabBarVC") as! UITabBarController
let navigationController = UINavigationController(rootViewController: vc)
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = navigationController
vc.navigationController?.isNavigationBarHidden = true
self.window?.makeKeyAndVisible()