【问题标题】:Push new UIViewController with transparency以透明方式推送新的 UIViewController
【发布时间】:2020-01-26 13:45:54
【问题描述】:

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

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

根据Apple

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

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

let semiController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SemiViewController")
    semiController.modalPresentationStyle = .overFullScreen
    self.navigationController?.pushViewController(semiController, animated: true)

我认为我不必为此指定自定义过渡。那么是什么给出的呢?

谢谢。

【问题讨论】:

    标签: ios uinavigationcontroller transparency pushviewcontroller


    【解决方案1】:

    你必须展示你的控制器,因为这个 modalPresentationStyle 和 modalTransitionStyle 只会在你选择呈现模态方法时才会影响。确保保持半控制器主视图的背景颜色清晰或不透明

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

    【讨论】:

    • 谢谢,这在一定程度上有效,底层控制器显示通过,但我想将视图控制器推送到导航堆栈上,而不是显示它。
    • 您可能需要维护与此 semiController 不同的堆栈(导航控制器堆栈)来推送新控制器,并且需要为管理流程工作(关闭和弹出等)
    • 不一样是什么意思?我已经有了 self.navigationController 提供的导航堆栈...我应该自定义它吗?
    猜你喜欢
    • 2018-04-08
    • 2016-05-01
    • 2017-06-16
    • 2011-03-03
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多