弹出窗口有黑色背景,即使它设置为清除

Posted

技术标签:

【中文标题】弹出窗口有黑色背景,即使它设置为清除【英文标题】:Popup has black background even though it is set to clear 【发布时间】:2018-09-18 19:04:04 【问题描述】:

我有一个UIViewController,我要在另一个上面展示。它应该显示为具有透明背景的弹出窗口。它显示正常,但背景是黑色的。它在嵌入UINavigationController 时呈现。

问题是背景颜色是黑色的,我看不到下面的视图,即使所有背景颜色都设置为清除。我什至尝试在展示控制器时将背景设置为清晰,但仍然没有。我在Storyboard 中设置了它以显示当前上下文并交叉溶解。

视图调试器也不会将层次结构中的任何视图显示为黑色。不知道是什么问题,感谢任何帮助,谢谢!

let vc = UIStoryboard.init(name: "AccountSettings", bundle: nil).instantiateViewController(withIdentifier: "upgradeVCPopup") as! UpgradeVCPopup
let nav = UINavigationController(rootViewController: vc)
nav.view.backgroundColor = .clear
vc.view.backgroundColor = .clear
if let navigationController = self.navigationController 
    navigationController.present(nav, animated: true, completion: nil)
 else 
    self.present(nav, animated: true, completion: nil)

【问题讨论】:

【参考方案1】:

你有黑色背景的原因是你没有设置你的UIViewControllers UIModalPresentationStyle。此参数确定您的模态视图控制器如何显示。模态视图控制器的默认值为fullScreen

来自Apple Documentation:

UIModalPresentationStyle.fullScreen

演示完成后,属于演示视图控制器的视图将被删除。

这意味着在你的视图控制器出现之后,之前的视图控制器就会被移除。当它被移除时,由于它下面没有任何东西,你会看到黑色。如果您希望之前的视图控制器保持可见,您可以将modalPresentationStyle 设置为overFullScreen

来自Apple Documentation:

UIModalPresentationStyle.overFullScreen

演示结束时,演示内容下方的视图不会从视图层次结构中删除。因此,如果呈现的视图控制器没有用不透明的内容填充屏幕,则底层内容会显示出来。

为此,请在呈现您的视图控制器之前添加以下行:

vc.modalPresentationStyle = .overFullScreen

这应该会有所帮助。

【讨论】:

就是这样,谢谢!我在情节提要中的 VC 上正确设置了该设置,但完全没有意识到我在导航中缺少它,因为我是以编程方式创建的。【参考方案2】:

您是否尝试过设置nav.view.backgroundColor = .white 通过设置nav.view.backgroundColor = .clear 您将导航窗口的背景设置为清除(导航窗口的默认底部为黑色)

【讨论】:

以上是关于弹出窗口有黑色背景,即使它设置为清除的主要内容,如果未能解决你的问题,请参考以下文章

将其设置为清除后,Swift 模态视图背景显示为黑色

eclipse怎么设置黑色背景?

PickerView 在黑色背景下不可见

华为状态栏怎么变黑色

IDEA中怎么设置黑色或白色背景

IE7:作为新选项卡打开时自定义弹出背景颜色