这似乎是一个有据可查的问题,但在线解决方案没有奏效。这只是未能为我提供有效答案的帖子的示例列表:
- ViewWillAppear 不执行代码
- viewWillAppear 没有被调用
- viewWillAppear 未调用
- UINavigationController 继承,ViewWillAppear 未调用
- 在 popToViewController 之后未调用 viewWillAppear
- iPhone viewWillAppear 未触发
我发现我的 viewWillAppear 没有被调用的问题与我的视图层次结构有关。我使用的选项卡控制器不是视图层次结构的最高部分。选项卡控制器的视图控制器之一是导航控制器的根视图控制器。这就是我试图获得工作 viewWillAppear 或 viewDidAppear 的地方。这是我尝试过的但没有奏效的方法。在选项卡控制器中,我添加了以下代码:
let nav2 = UINavigationController(rootViewController: locationsVC)
nav2.beginAppearanceTransition(true, animated: false)
//...//
viewControllers = [ nav1, nav2, nav3, nav4 ]
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
for vc in self.children {
vc.beginAppearanceTransition(true, animated: animated)
}
}
在场景委托中,这是我的代码:
guard let windowScene = (scene as? UIWindowScene) else { return }
self.window = UIWindow(windowScene: windowScene)
let rootVC = NewOrExistingViewController()
rootVC.beginAppearanceTransition(true, animated: false)
let rootNC = UINavigationController(rootViewController: rootVC)
rootNC.navigationController?.navigationBar.isHidden = true
rootNC.beginAppearanceTransition(true, animated: false)
self.window?.rootViewController = rootNC
let tbc = TabBarViewController()
tbc.selectedIndex = 0
tbc.beginAppearanceTransition(true, animated: false)
rootVC.add(asChildViewController: tbc)