提出一个视图控制器有昏暗的背景

时间:2016-06-06 07:51:49

标签: ios swift uiviewcontroller opacity presentviewcontroller

我有一个视图控制器,视图的背景我需要半透明并继续显示下面的视图。我调整了nib文件中的不透明度,并尝试将视图控制器推入导航堆栈并以模态方式呈现,但加载后,前一个视图被卸载。我怎么能解决这个问题?

8 个答案:

答案 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的标签,以模态方式呈现:)

enter image description here

如果您的答案是肯定的,那么您可以这样做:)假设您是故事板,我会写答案:)如果您使用的是Xib,请不要担心所有这些属性也可以通过编程方式设置:)< / p>

这里的要点是modal presentation overfull screen:)

以下是如何做到这一点:)

在两个ViewControllers之间拖动一个segue :)使segue以模态方式呈现viewController并选择以下配置:) enter image description here

现在选择你的父ViewController,它将呈现secondViewController并将其背景颜色更改为白色(或任何你想要的颜色)

enter image description here

现在选择你需要呈现的第二个ViewController :)选择它的View并将其alpha设置为0.5并将颜色设置为清除颜色,如下所示

enter image description here

现在将另一个视图添加到viewController,将其颜色设置为黑色,将alpha设置为0.5或0.6,具体取决于您对阴影的需求:)

enter image description here

现在添加你要添加的任何视图组件,如上图所示:)

希望有所帮助:)

答案 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)