使用 UIModalPresentationStyle.OverCurrentContext 在 ViewController 之上的 UITransitionView
Posted
技术标签:
【中文标题】使用 UIModalPresentationStyle.OverCurrentContext 在 ViewController 之上的 UITransitionView【英文标题】:UITransitionView on top of ViewController using UIModalPresentationStyle.OverCurrentContext 【发布时间】:2015-05-08 00:32:53 【问题描述】:我正在尝试将一个视图控制器设置在另一个之上,同时保持第一个视图控制器可见。
但是,我看不到第一个,因为我有一个 UITransitionView,上面有一个 UIView(第一个在层次结构中,这就是我知道 .OverCurrentContext 工作的方式)
这应该是一个非常简单的代码,我不确定发生了什么。我知道我无法触摸 UITransitionView,这就是为什么我不知道该怎么做。
let vc = storyBoard.instantiateInitialViewController() as MyPresenterViewController
vc.view.backgroundColor = .clearColor()
vc.modalPresentationStyle = .OverCurrentContext
viewControllerToPresentIn.presentViewController(vc, animated: true, completion: nil)
我们将不胜感激。
最好的问候,
【问题讨论】:
你需要解释你在用 UITransitionView 做什么。它是如何添加的? @rdelmar 我什么都没做,这就是为什么我不确定它为什么会出现。它不应该带有一个简单的 presentVC 对吧? 我不知道为什么会这样。当我这样做时(用 self 替换 viewControllerToPresentIn),它工作正常。什么是 viewControllerToPresentIn? 是自己的,我就是这样写的,方便理解 storyBoard 是不是与自己所在的自己不同的故事板? 【参考方案1】:这个回复有点晚了,但我最近遇到了类似的问题。我想要呈现的模态(带有半透明面纱)被一个白色的 UITransitionView 包含,隐藏了底层视图。我怀疑当您在某些情况下发出 controller.present()
调用以显示您的 Modal 时(但不知道为什么或何时),这个 TransitionView 会被注入
作为一种快速而肮脏的解决方法,您可以在演示之前尝试清除模态视图的父视图的背景。出于某种原因,一旦您呈现模态框,UITransitionView 也会获得清晰的颜色。
extension UIView
//This will eventually get to the UITransitionView and clear the background.
func clearHierarchyBackground()
self.backgroundColor = .clear
if let superView = self.superview
superview.clearHierarchyBackground()
let parentController = MyParentViewController()
let childController = MyModalViewController()
childController.modalPresentationStyle = .overFullScreen //.overCurrentContext should also work..
childController.view.clearHierarchyBackground()
/* The above makes your controller root view .clear
so you need to add subviews with transparency &
content as you see fit.*/
parentController.present(childController, animated:true....)
【讨论】:
以上是关于使用 UIModalPresentationStyle.OverCurrentContext 在 ViewController 之上的 UITransitionView的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)