视图控制器完成加载时 UIView 背景颜色发生变化

Posted

技术标签:

【中文标题】视图控制器完成加载时 UIView 背景颜色发生变化【英文标题】:UIView background color changing when view controller finishes loading 【发布时间】:2016-10-27 14:18:25 【问题描述】:

我正在通过另一个视图控制器以模态方式加载视图控制器,并尝试使用以下方法更改背景颜色:

 override func viewDidLoad() 
    super.viewDidLoad()

    transparentBG.backgroundColor? = UIColor.black.withAlphaComponent(0.4)

    // transparentBG is a UIView defined in storyboard

当视图动画到位置(向上滑动)时,它会保持我设置的 alpha 值。但是,一旦它到达屏幕顶部,它就会移除 alpha 分量,并将颜色更改为看起来像带有 alpha 分量的颜色,就像灰色,但没有透明度,如下图所示。

如果完成加载后是否还需要维护 alpha 组件?

【问题讨论】:

你想通过半透明顶视图控制器看到上一个屏幕的视图吗?这就是将这个 alpha 添加到子视图的目的吗? 模态视图完成动画后,下方的视图将被移除。 Transparent Modal View on Navigation Controller的可能重复 Tushar - 是的,我希望现有的视图控制器在它下面可见。 James P - 啊......这是有道理的。感谢您的链接! 【参考方案1】:

第一步:将其更改为overFullScreen 演示文稿。

第二步:没有第二步。

【讨论】:

【参考方案2】:

只需在 viewContriller 上设置演示样式

[myViewcontroller setModalPresentationStyle:UIModalPresentationCustom];
[myViewcontroller setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self.navigationController presentViewController:myViewcontroller animated:true completion:nil];

【讨论】:

【参考方案3】:

发生的情况是 alpha 被保留,但在动画完成后前一个视图被删除。

您可以采取几种方法。

    截取上一个视图的屏幕截图并将其作为背景插入到新视图中。查看 drawViewHierarchyInRect 函数。您可以在新视图控制器的 init 方法中抓取屏幕截图,然后在 viewDidLoad 中将其设置为背景图像。

    另一种方法是将叠加层作为子视图添加到现有视图,甚至是窗口本身。

我已经成功使用了这两种方法。

【讨论】:

谢谢!我会调查的!

以上是关于视图控制器完成加载时 UIView 背景颜色发生变化的主要内容,如果未能解决你的问题,请参考以下文章

设置 UIVIew 的背景颜色

UiView背景颜色不同[重复]

UIView 背景颜色总是黑色

如何使背景视图变暗

UIView,动画背景颜色非常缓慢,挂起滚动视图(!)

[TextInputLayout使用自动完成功能时背景颜色会发生变化