模态呈现的 UIViewController 背景颜色随机变化
Posted
技术标签:
【中文标题】模态呈现的 UIViewController 背景颜色随机变化【英文标题】:Background Color Randomly Changes of UIViewController presented Modally 【发布时间】:2015-06-26 16:09:31 【问题描述】:所以我有一个UIViewController
(AViewController),它有一个 UIButton,它以模态方式呈现另一个 UIViewController (BViewController)。 BViewController 有一个模糊 AViewController 的 UIVisualEffectView。在情节提要中,我将以下内容的背景颜色设置为 0% 不透明度:BViewController 的视图,以及 UIVisualEffectView 及其视图。所以它应该是完全透明的,只是有模糊效果。
大多数情况下,这按预期工作。然而,大约三分之一的时间(但随机,即我找不到模式)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)
【问题讨论】:
您能否发布一个能够可靠地重现该问题的示例项目?这里不足以重现问题。 @AaronBrager 我现在将努力组装一个。感谢您的帮助。 @AaronBrager 我发布了代码 - 我意识到我之前从未提出过没有 segue 的模态 VC,所以希望我没有过早地问这个问题。 你能分享一下你用来使背景颜色清晰的代码 【参考方案1】:与 Segue 相关
据我所知,这种情况正在发生,因为当你呈现一个带有 segue 的视图控制器时,它会出现在它所连接的视图控制器上,并且也只放在当前堆栈中,即 ViewControllerA 所在的堆栈中。
没有 segue 连接,即 INITIATING a ViewController
但是当你启动一个视图控制器,即 ViewControllerB 时,它会被加载到一个新的堆栈中,因此它在它下面找不到任何视图控制器,因此在制作 ViewControllerB 的主视图时它会显示为深灰色或黑色颜色为清除颜色。
//我希望我能够传达我的自我,并对你有所帮助。快乐编码:)
【讨论】:
以上是关于模态呈现的 UIViewController 背景颜色随机变化的主要内容,如果未能解决你的问题,请参考以下文章
具有透明背景的模态 UISplitViewController
如何访问呈现模态视图的 UIViewController 类/类名?
呈现模态 UIViewController 时出现奇怪的崩溃