ios - 关闭顶层 VC 时不调用 ViewWillAppear
问题描述
正如我在标题中所写,我不确定为什么在解雇另一个 VC 时不调用 ViewWillAppear。我认为我的项目有点棘手,所以我将解释我的项目中发生了什么。
大多数情况下,我在代码中配置 UI。我有两个 VC,ListVC 和 CameraVC,我在 ListVC 中有一个标签栏和一个导航变量,我在代码中配置了所有这些。所以在 SceneDelegate 我写了类似的东西
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let scene = (scene as? UIWindowScene) else { return }
window = UIWindow(frame: scene.coordinateSpace.bounds)
window?.windowScene = scene
window?.rootViewController = createTabBar()
window?.makeKeyAndVisible()
}
func createTabBar() -> CustomTabBarController {
let tabbar = CustomTabBarController()
tabbar.viewControllers = tabbar.setUpTabbarItems()
return tabbar
}
在 CustomTabBarController 类中,因为我只想显示事件列表,所以我添加了
func createListNC() -> UINavigationController {
let ListVC = ListViewController()
ListVC.tabBarItem = UITabBarItem(title: "", image: UIImage(named: "add-icon"), tag: 0)
return UINavigationController(rootViewController: ListVC)
}
func setUpTabbarItems() -> [UIViewController]{
return [createListNC()]
}
所以现在我可以在应用程序的主页上显示 List VC。但是,我在情节提要中制作了 CameraVC,当用户点击 List VC 中的一个 Event 单元格并显示 CamearaVC 时,我添加了以下代码。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let storyboard = UIStoryboard(name: "Camera", bundle: nil)
let CameraVC = storyboard.instantiateViewController(identifier: "Camera")
self.present(CameraVC, animated: true, completion: nil)
}
所以我也可以展示 ListVC 中的 CameraVC。
但是当我想从 CameraVC 回到 ListVC 时,就会出现问题。我将 IBAction 添加到 CameraVC 中的“< back”按钮,我可以关闭 CameraVC,但是,由于 cameraVC 的屏幕是水平的,因此 ListVC 也与水平堆叠,我想让 ListVC 垂直。
@IBAction func unwindToLiveList (_ segue: UIStoryboardSegue) {
self.presentingViewController?.dismiss(animated: true, completion: nil)
}
因此,我打算编写一个代码,用于在用户从 CameraVC 回到 ListVC 时修复应用程序的方向。
我只是想知道我应该把修复方向代码放在哪里,所以我向 ListVC 添加了 viewwillappear 和一些打印语句,但是当从 CameraVC 回到 ListVC 时,它们都没有被调用。我还在 CustomTabBarController 类中编写了相同的代码,但它从未被调用...
所以,我想知道当用户从 CameraVC 回到 ListVC 时,我可以在哪里和哪个文件编写代码来修复要触发的方向。另外,如果有人能解释为什么会这样,请告诉我。
解决方案
原因在于他们在 iOS13(或 14)中所做的更改。在默认的模态呈现模式(似乎您正在呈现模态)是全屏之前,现在它们在当前上下文中呈现而不会使呈现视图控制器消失,这就是为什么willAppear
不调用它,它已经存在。
如果要更改该行为,可以将不同的演示样式设置为.fullScreen
.
推荐阅读
- java - 如何为类对象创建形参?
- excel - 如何将指定范围内的颜色填充到最后使用的行
- javascript - 如何在 piral app-shell 和 pilet 应用程序中使用 styled-components?
- asp.net-core-webapi - 会话存储在 asp.net 核心 web api 中返回 null
- javascript - 复选框返回 null
- mongodb - 使用 FindOne 和 $natural 从 GoLang 中的 mongodb 获取最后插入的元素
- python - 无法安装 Ball 模块
- powershell - 如何在powershell中返回具有相同扩展名但包含特定名称结尾的文件?
- amazon-web-services - 在 Terraform 中使用模块将 EIP 关联到我的 NAT 网关后出现错误
- python-3.x - 使用给出错误“ValueError:加密/解密失败”的加密包解密数据。