我有一个视图控制器,视图的背景我需要半透明并继续显示下面的视图。我调整了nib
文件中的不透明度,并尝试将视图控制器推入导航堆栈并以模态方式呈现,但加载后,前一个视图被卸载。我怎么能解决这个问题?
答案 0 :(得分:18)
这是你正在寻找的吗?
查看控制器A - >查看控制器B(笔尖)
Swift< 3:强>
在View Controller A中,添加以下代码行:
let viewControllerB = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
viewControllerB.modalPresentationStyle = .OverFullScreen
presentViewController(viewControllerB, animated: true, completion: nil)
在View Controller B中,使用view
方法设置colorWithAlphaComponent
的背景颜色:
view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.7)
斯威夫特≥3:
查看控制器A:
let viewControllerB = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
viewControllerB.modalPresentationStyle = .overFullScreen
present(viewControllerB, animated: true, completion: nil)
查看控制器B:
view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
答案 1 :(得分:3)
Swift 3.0代码
let addIncidentViewController = self.storyboard?.instantiateViewController(withIdentifier: "addIncidentViewController") as! AddIncidentViewController
addIncidentViewController.modalPresentationStyle = .overCurrentContext
self.present(addIncidentViewController, animated: true) {
}
并使用一些alpha设置背景颜色。
答案 2 :(得分:2)
您可以使用UIView
代替视图控制器。
然后调整视图背景颜色的alpha。
答案 3 :(得分:2)
AppsDev,
这是你在寻找伙伴???这里 Testing1234 是添加到parentViewController的标签我这里是一个添加到childViewController的标签,以模态方式呈现:)
如果您的答案是肯定的,那么您可以这样做:)假设您是故事板,我会写答案:)如果您使用的是Xib,请不要担心所有这些属性也可以通过编程方式设置:)< / p>
这里的要点是modal presentation
overfull screen
:)
以下是如何做到这一点:)
在两个ViewControllers之间拖动一个segue :)使segue以模态方式呈现viewController并选择以下配置:)
现在选择你的父ViewController,它将呈现secondViewController并将其背景颜色更改为白色(或任何你想要的颜色)
现在选择你需要呈现的第二个ViewController :)选择它的View并将其alpha设置为0.5并将颜色设置为清除颜色,如下所示
现在将另一个视图添加到viewController,将其颜色设置为黑色,将alpha设置为0.5或0.6,具体取决于您对阴影的需求:)
现在添加你要添加的任何视图组件,如上图所示:)
希望有所帮助:)
答案 4 :(得分:1)
<强> Swift3 强>
在viewWillAppear
下,您可以使用:
self.view.alpha = 0.8
在viewWillDisappear
下,您可以使用:
self.view.alpha = 1.0
答案 5 :(得分:0)
(Swift 3)更好的解决方案是从xib加载视图,然后将其添加到控制器,如下所示:
let supportView = Bundle.main.loadNibNamed("YourXIB", owner: nil, options: nil)?[0] as! YourView
let viewController = UIViewController()
viewController.view = supportView
viewController.modalPresentationStyle = .overCurrentContext
present(viewController, animated: true, completion: nil)e
然后添加一些透明度:
viewController.view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.7)
答案 6 :(得分:0)
有两种方法可以为ViewController提供不透明视图。
当前的Viewcontroller
// presenting view controller
definesPresentationContext = true
// presented view controller
modalPresentationStyle = .overCurrentContext
如果视图控制器在全屏模式下具有导航或标签栏。
// presented view controller
modalPresentationStyle = .overFullScreen
modalTransitionStyle = .crossDissolve
答案 7 :(得分:0)
想象一下,您想在多个地方使用视图控制器(假设您正在创建框架)。您需要将modalPresentationStyle
设置为.overCurrentContext
,但是您不想每次创建视图控制器的新实例时都进行设置。
您想将其设置在将显示的视图控制器的覆盖init
内
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
modalPresentationStyle = .overCurrentContext
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
然后在此控制器的viewDidLoad()
中,将背景颜色设置为较浅的黑色阴影:
override public func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.black.withAlphaComponent(0.6)
}
最后,当您需要展示视图控制器时,只需对其进行初始化并展示
let viewController = SecondViewController(nibName: "SecondViewController", bundle: nil)
present(viewController, animated: true)