【问题标题】:isBeingPresented value is inconsistentisBeingPresented 值不一致
【发布时间】:2018-01-23 12:12:05
【问题描述】:

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

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

但是如果我现在在模态呈现的 NavigationController 上推送一个新的 ViewController 并弹回原来的 ViewController,那么检查 isBeingPresented 的相同调用将返回 false。

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

【问题讨论】:

  • 在视图控制器生命周期的什么方法中检查isBeingPresented
  • viewWillAppear。我得到了那个。

标签: ios uinavigationcontroller uikit


【解决方案1】:

这是预期的行为。 isBeingPresented 仅在给定的viewController 当前正在呈现时为真 (docs):

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

而不是当它已经呈现时。在演示过程中设置为 true - 从导航到该视图控制器开始直到视图控制器完全呈现,并且所有生命周期事件都发生(演示动画完成,viewWillAppear/viewDidAppear 回调被称为等)。在那一刻之后,视图控制器呈现,但不是正在被呈现,因此isBeingPresented不再设置为true。

self.navigationController 最初是通过模态演示呈现的,从中弹出视图控制器不会触发演示。在呈现UINavigationController 之后,它会在其上推送和弹出视图控制器期间一直呈现。您必须 dismiss navigationController,然后再次显示它,以便 isBeingPresented 成为 true - 因为只有在模态显示期间才会显示它。

【讨论】:

  • 如果我理解正确,您的意思是它只在第一次演示活动期间是正确的?但是设置是这样的,UINavigationController 在其中的所有推送/弹出期间保持模态呈现。知道这些不是很有用吗?
  • @Alper 用于您描述的设置,只有一个演示事件.. navigationController 始终显示,没有新的演示事件发生了.. 并且其中的 viewController 被 推送,没有呈现,所以对于他们来说,isBeingPresented 不会被设置为 true,也不会
  • 就像你说的那样,因为“navigationController 一直呈现”我希望 isBeingPresented 一直都是真的。
  • @Alper isBeingPresented 表示它正在被呈现,而不是它被呈现.. 它正在被呈现——从你的角度来看,它是正确的用它作为参数调用present(viewController:),直到调用present(viewController:)的完成——一旦视图控制器完全呈现(动画完成,所有回调都被调用等),它就不是isBeingPresented不再-这里的关键字是being..它只是在呈现过程中是true,而不是现在呈现它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2020-06-10
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多