UIViewController的背景颜色随机变化呈现模态

时间:2015-06-26 16:09:31

标签: ios objective-c iphone swift uiviewcontroller

所以我有一个UIViewController(AViewController),它有一个UIButton,模拟地呈现另一个UIViewController(BViewController)。 BViewController有一个模糊AViewController的UIVisualEffectView。在storyboard中,我将背景颜色设置为以下0%的不透明度:BViewController的视图,以及UIVisualEffectView及其视图。所以它应该是完全透明的,只是有模糊效果。

大部分时间这都按预期工作。但是,大约有3次中的1次(但是随机地,即我找不到模式),ViewController的背景是深灰色而不是透明。而且它不透明。

我试图以编程方式确保颜色清晰。如果我在viewDidLoad中将背景(BViewController和UIVisualEffectView及其视图)设置为clearColor,则没有任何变化,即它大约每4次中有3次起作用。但是,如果我在viewDidAppear中设置背景,那么它会变成深灰色的确切颜色,并且在任何时候都不会透明(而不是1次3次)。

代码很简单,UIViewControllers在故事板中设置。

在AViewController中

var aViewController = storyboard!.instantiateViewControllerWithIdentifier("AViewController") as! 

self.presentViewController(aViewController, animated: false, completion: nil)

在BViewController中

self.dismissViewControllerAnimated(false, completion: nil)

**编辑:XCODE中简单的测试项目,以复制问题**

这给了我9/10倍的深灰色背景 - 让我意识到我之前从未提出过没有segue的模态UIViewController。

BViewController

class BViewController: UIViewController {
    @IBAction func exit(sender: AnyObject) {
        self.dismissViewControllerAnimated(false, completion: nil)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

AViewController

class AViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func present(sender: AnyObject) {
        var bViewController = storyboard!.instantiateViewControllerWithIdentifier("bViewController") as! BViewController

        self.presentViewController(bViewController, animated: false, completion: nil)

    }
}

1 个答案:

答案 0 :(得分:0)

连接Segue

据我所知,它正在发生,因为当你呈现一个带有segue的视图控制器时,它会通过它连接到的视图控制器呈现,并且也只放在当前堆栈中,即ViewControllerA所在的堆栈。

没有连接的segue,即启动ViewController

但是当你初始化一个视图控制器,即ViewControllerB时,它会被加载到一个新的堆栈中,因此它在它下面找不到任何视图控制器,因此在制作ViewControllerB的主视图时它会显示深灰色或黑色。颜色为CLEAR颜色。

//我希望我能够表达自己,并对你有所帮助。快乐编码:)