Ios 使用透明度推送新的UIViewController

Ios 使用透明度推送新的UIViewController,ios,uinavigationcontroller,transparency,pushviewcontroller,Ios,Uinavigationcontroller,Transparency,Pushviewcontroller,我有一个非常简单的项目,在导航控制器中嵌入了一个视图控制器。我想推出一个新的具有透明度的视图控制器,它实际上允许底层控制器的部分显示出来 在推送转换期间,底层控制器的某些部分确实会通过正在推送的新控制器显示,但当转换完成时,底层控制器视图将从视图层次结构中删除,新控制器的透明部分将显示为黑色 根据, 使用UIModalPresentationFullScreen样式显示视图控制器时,UIKit通常在转换动画完成后删除基础视图控制器的视图。您可以通过指定UIModalPresentationO

我有一个非常简单的项目,在导航控制器中嵌入了一个视图控制器。我想推出一个新的具有透明度的视图控制器,它实际上允许底层控制器的部分显示出来

在推送转换期间,底层控制器的某些部分确实会通过正在推送的新控制器显示,但当转换完成时,底层控制器视图将从视图层次结构中删除,新控制器的透明部分将显示为黑色

根据,

使用UIModalPresentationFullScreen样式显示视图控制器时,UIKit通常在转换动画完成后删除基础视图控制器的视图。您可以通过指定UIModalPresentationOverFullScreen样式来防止删除这些视图。当呈现的视图控制器具有透明区域,使底层内容可以显示时,可以使用该样式

在初始化推送的按钮操作期间,我将显示(推送)视图控制器的modalPresentationStyle指定为UIModalPresentationOverFullScreen:

let semiController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SemiViewController")
    semiController.modalPresentationStyle = .overFullScreen
    self.navigationController?.pushViewController(semiController, animated: true)
我不认为我必须指定一个自定义转换才能使其工作。那么是什么原因呢


谢谢。

您必须展示您的控制器,因为此modalPresentationStyle和modalTransitionStyle仅在您选择present modally方法时才会生效。确保Semicondroller主视图的背景色清晰或不透明度较低

let semiController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SemiViewController")
semiController.modalPresentationStyle = .overCurrentContext
semiController.modalTransitionStyle = .crossDissolve
self.present(semiController, animated: true)

谢谢,这在一定程度上是可行的,底层控制器显示通过,但我想在导航堆栈上推送视图控制器,而不是显示它。您可能需要维护与此半导体控制器不同的堆栈(导航控制器堆栈),以推送新控制器,并需要管理流(解除和弹出等)你说不同是什么意思?我已经从self.navigationController提供了导航堆栈。。。我需要定制吗?