Ios 视图将显示为已调用,但在按下ViewController后未显示为已调用

Ios 视图将显示为已调用,但在按下ViewController后未显示为已调用,ios,objective-c,iphone,pushviewcontroller,Ios,Objective C,Iphone,Pushviewcontroller,在我的应用程序中,有时pushViewController会无缘无故地失败,发生的事情非常奇怪。navigationBar和navigationItem会更改,但不会推送ViewController。然后我就不能在屏幕上点击任何东西了。我发现调用了viewWillAppear,但未调用viewDidAppear。我按下iPhone的home按钮进入后台。再次进入前景后,按下ViewController并调用ViewDidDisplay。我不知道为什么和什么时候会发生 您推入视图层次结构的view

在我的应用程序中,有时pushViewController会无缘无故地失败,发生的事情非常奇怪。navigationBar和navigationItem会更改,但不会推送ViewController。然后我就不能在屏幕上点击任何东西了。我发现调用了viewWillAppear,但未调用viewDidAppear。我按下iPhone的home按钮进入后台。再次进入前景后,按下ViewController并调用ViewDidDisplay。我不知道为什么和什么时候会发生


您推入视图层次结构的viewcontroller是否会在未调用[super ViewWillDisplay/ViewDidDisplay:animated]的情况下意外覆盖ViewWillDisplay/ViewDidDisplay?

您可能是在ViewWillDisplay方法中意外调用了[super viewDidLoad]

您知道,如果您覆盖navigationController.InteractivePostureRecognizer.delegate,但未正确还原,则如果您可以通过以下方式重新设置,也会出现此错误:

当没有视图时,尝试使用左边缘弹出手势 它下面的控制器,即根视图控制器上的控制器,您的VC主页 控制器 尝试在此之后单击任何UI元素。 然后,当当前viewController是导航控制器中的第一个VC时,禁用InteractiveProgTestureRecognitor

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
参考:

对于与我有相同问题的人:检查所有自定义视图,看看是否没有无限循环的布局子视图。这是在ViewWillDisplay和ViewDidDisplay之间发生的事情之一。

在我的实现中,我有一个自定义的选项卡栏控制器,因此viewDid Display是空的,所以超级调用解决了它

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated) //was missing this line
}

请覆盖DidReceiveMemoryWarning并检查此方法是否已被调用,请检查pushedFromView引用是否仍保留?还要检查是否在超类上调用相同的方法。与相应函数中的[super ViewWillDisplay]和[super ViewDidDisplay]类似。您在ViewWillDisplay、viewWillLayoutSubviews、viewDidLayoutSubviews或UpdateViewContracts或它们调用的任何会阻塞、永久循环等的方法中执行任何操作吗?如果您在该点中断调试器,调用堆栈是什么样子的?请更新您的问题以在那里添加代码,而不是将其放在注释中,这样会更容易阅读…否。每个名为[超级视图将显示/视图显示:动画]的视图控制器。