黑色背景屏幕,同时显示弹出视图,使用单独的UIViewController

时间:2018-01-13 13:22:15

标签: ios swift uiviewcontroller segue

我有一个UIViewController,它嵌入在UINavigationController中。在该视图控制器中,我有一个UIButton,它显示一个弹出视图,这是另一个UIViewController(pVC)。它是通过设置为segue的{​​{1}}来实现的。在弹出窗口中我只有一个showModally

现在,我将pVC的背景颜色设置为清除,因此当点击按钮时,它会产生效果,就像只显示pVC内部的视图一样。

问题是,当我将pVC的背景颜色设置为UIView并点击按钮时,pVC会在我当前clear之上显示,但一秒后,背景变为黑色。这是它的样子:

enter image description here

view controller中,我发现这是一个变成黑色的View Hierarchy Debugger图层。我想知道,也许这是因为我之前的UIWindow嵌入了view controller?当我尝试用两个UINavigationController做同样的事情时,其中没有一个嵌入到任何内容中,它可以正常工作。

如果您知道发生这种情况的确切原因和/或如何解决问题,我将非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

尝试在当前上下文中显示模态pVC,这样做:

enter image description here

关于overCurrentContext

  

演示文稿完成后,视图层次结构中的视图不会被删除。 因此,如果呈现的视图控制器没有用不透明的内容填充屏幕,则底层内容会显示出来。

答案 1 :(得分:1)

将弹出视图的背景颜色改为透明,并按照这样做

同时将此代码添加到viewController,通过在带有/不带动画的故事板中选择模态来向您呈现弹出并更改segue的名称

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if(segue.identifier == "showLogout")
    {

         let newVC = segue.destination;

        self.setPresentationStyleForSelfController(selfController: self,presentingController: newVC)


    }
  }

func setPresentationStyleForSelfController(selfController:UIViewController,presentingController:UIViewController)
{
   if #available(iOS 8.0, *)
    {

        //iOS 8.0 and above

        presentingController.providesPresentationContextTransitionStyle = true;

        presentingController.definesPresentationContext = true;

        presentingController.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext




    }
    else
    {

         presentingController.modalPresentationStyle = UIModalPresentationStyle.currentContext

        selfController.navigationController?.modalPresentationStyle = UIModalPresentationStyle.currentContext
    }

}