isBeingPresented值不一致

Alp*_*per 2 uikit uinavigationcontroller ios

我以模态方式呈现了一个带有ViewController的NavigationController.

在ViewController中我可以看到这self.navigationController.isBeingPresented是真的.

但是,如果我现在在模态呈现的NavigationController上推送一个新的ViewController并弹回到原始的ViewController,则同一个check的调用isBeingPresented返回false.

文档很少但我不能真正解释这种不一致,除了它可能是一个错误?

Mil*_*sáľ 9

这是预期的行为. isBeingPresented只有在viewController当前正在呈现给定(docs)时才是真的:

一个布尔值,指示是否正在显示视图控制器.

而不是它已经呈现.在演示过程中将其设置为true - 从导航到该视图控制器的时间点开始,直到视图控制器完全呈现的时刻,以及所有生命周期事件发生(演示动画完成,viewWillAppear/ viewDidAppear回调被调用等) .那一刻之后,视图控制器提出,但没有提出,因此isBeingPresented不会再被设置为true.

首先self.navigationController呈现(通过模态演示),从中弹出视图控制器不会触发演示.在呈现a之后UINavigationController,在推送和弹出视图控制器的过程中呈现整个时间.你将不得不dismissnavigationController,然后再次提交它的isBeingPresentedtrue-因为只有在模式呈现它正在呈现.

  • @Alper用于你描述的设置,**只有一个演示事件**..**navigationController一直显示**,没有新的演示事件发生..并且其中的viewControllers被**推**,没有呈现,所以对他们来说,'isBeingPresented`不会被设置为true (2认同)
  • @Alper`isBeingPresented`意味着它被**呈现,而不是它被呈现..它正在被呈现的过程中 - 从你调用`present(viewController :))`的那一点来看它是真的一个参数,直到调用`present(viewController:)`完成的那一刻 - 一旦视图控制器完全呈现(动画完成,所有回调被调用等),它就不再是'isBeingPresented`了 - 这里的关键字是**是**..它只是在呈现过程中才是"真实",而不是显示它现在呈现 (2认同)