【问题标题】:Presenting ViewController Z-Index Issue呈现 ViewController Z-Index 问题
【发布时间】:2015-05-28 16:07:09
【问题描述】:

所以我的应用按以下格式布局。

Window上有一个rootVC。然后我有另一个viewController(我们称之为PlayerVC),它有2个视图,我已经将第二个视图作为子视图添加到窗口中。现在我试图在它上面展示一个 UIAlertController(从 PlayerVC 展示它),但它隐藏在最顶层的视图下方。

如图所示,当我添加警报时,深色阴影视图会添加到最顶部视图下方,并且可以在底部看到小操作表。我不知道如何让它显示在顶部 =S

【问题讨论】:

  • 为什么要将第二个视图作为子视图添加到窗口中?我假设这是 alertView 在下面绘制的那个?
  • @SimonMcLoughlin 我这样做的原因是,我正在尝试构建一个类似于 Spotify 的 iOS 应用程序的音乐播放器。所以 RootVC 是应用程序的所有正常流程,而 playerVC 有两个视图,一个是始终显示在屏幕底部的 miniPlayer(作为子视图添加到窗口),当它被点击时, playerVC 的第二个视图被添加到作为全屏播放器的窗口中。现在我无法在这个全屏播放器上显示警报。
  • 这是一个非常糟糕的主意。我建议将 viewController 作为根并添加 childViewControllers 而不是向窗口添加任何内容。我之前制作了一个带有水平滚动滚动视图的根 vc,其中添加了子视图控制器并启用了分页。然后你就可以将迷你播放器添加到根 vc 而不是窗口
  • @SimonMcLoughlin 好吧,我将尝试这种方法。我采用窗口方法的原因是,即使打开了侧面菜单,迷你播放器也会始终留在屏幕上,而 Spotify 以某种方式实现了这一点。让我们看看我是否可以使用您建议的技术来实现这一点=)
  • 好吧,如果您使用侧导航,则已经有一个根 vc 添加其他 vc 作为它的子 vc。这就是它如何滑入/滑出。您可以将其添加到其他所有内容之上

标签: ios objective-c iphone model-view-controller ios8


【解决方案1】:

在这种情况下,您已经有一个根 viewController 可以用来代替窗口。

您正在使用 sideNav 将其余屏幕添加到自身,以便显示它们并为其设置动画。

如果您将播放器添加为根 sidenav vc 的子级,它将能够显示在屏幕上的所有其他控件之上,而无需使用窗口。

【讨论】:

    【解决方案2】:

    我建议您不要将视图直接添加到窗口。

    我的设置与您在我目前正在开发的应用程序中所做的设置类似,我的解决方案是有一个带有两个容器的 RootViewController,一个用于内容,一个用于播放器。

    您可以通过 Interface Builder 添加容器,并将它们链接到另一个 ViewController。

    如果您没有使用 Interface Builder,您可以将播放器和内容视图作为子视图控制器添加到您的 rootViewController。

    这样可以避免在通过其他方式呈现视图控制器时出现问题。

    【讨论】:

    • 如果容器指的是 childVC,那么是的,你是对的,而且它有效!太感谢了! =D
    • 容器是通过 Interface Builder 添加 childViewControllers 的方式,但我会为通过代码执行此操作的人编辑我的答案。
    猜你喜欢
    • 2021-09-13
    • 2015-02-04
    • 2011-03-13
    • 2011-09-07
    • 2014-08-02
    • 2013-05-22
    • 2011-08-14
    • 2012-10-21
    • 1970-01-01
    相关资源
    最近更新 更多