【问题标题】:iOS controlling UIView alpha behaviour for subviewsiOS 控制子视图的 UIView alpha 行为
【发布时间】:2012-01-24 19:16:17
【问题描述】:

在我的示例中,我有 3 个视图:一个红色视图包含两个白色视图。我将红色容器视图的 alpha 更改为 0.3,这会发生(查看图像,当前结果)。

看到这一点,我只能假设(如果我错了,告诉我)设置视图的 alpha 也会设置其所有子视图的 alpha。我的问题是:有没有办法简单地告诉红色视图作为一个整体发挥作用,以便设置它的 alpha 会给出看起来像想要的结果(在图像中)?

这是没有任何 alpha 的样子:

【问题讨论】:

  • 在您的“想要的结果”中,您是否想通过白色和红色视图查看背景?如果不是,您应该使用带有 alpha 1 的自定义颜色。子视图“继承”来自 superview 的 alpha。您可以尝试的另一种方法是分层,但我不确定。

标签: ios uiview alpha


【解决方案1】:

详细说明 Mark 的回答:如果您在 Info.plist 中设置 UIViewGroupOpacity,它将更改应用程序中所有视图的行为,如果您只想修复此特定视图的呈现,您也可以使用这个 sn-p:

redContainerView.layer.shouldRasterize = YES;
// No setting rasterizationScale, will cause blurry images on retina.
redContainerView.layer.rasterizationScale = [[UIScreen mainScreen] scale];

【讨论】:

  • 你让我很开心。
【解决方案2】:

iOS alpha 属性由其子视图继承。如果我们为红色视图设置 alpha 0.3,那么两个子视图的 alpha = 0.3。没有办法阻止子视图从其父视图继承其 alpha 值。

解决方案可能是将红色视图的颜色设置为 0.3 的 alpha。 color 属性不会被其子视图继承。

[redView setBackgroundColor:[UIColor colorWithHue:238.0f/255.0f saturation:24.0f/255.0f brightness:24.0f/255.0f alpha:0.3]];

【讨论】:

  • 绝对最佳答案。颜色具有 alpha 和视图具有 alpha 的概念,每个都有不同的行为,这一概念非常重要。
  • alpha 值不被子视图继承
  • MVP 答案。这在界面构建器中特别容易做到,只需单击视图背景颜色并使用不透明度滑块即可。它是 alpha,没有 alpha 的所有子视图头痛。
  • 这个答案提供了一个很好的解决方法,但重要的是要记住,当它说“没有办法停止......”时它是不正确的,即使在 2014 年编写时也是如此。现代读者还注意到,在 iOS7 及更高版本上,问题中所需的行为现在已默认启用。
【解决方案3】:

查看 Info.plist 可能的 UIKit 键,特别是 UIViewGroupOpacity

UIViewGroupOpacity (Boolean - iOS) 指定 Core Animation 是否 子图层继承其父图层的不透明度。

Info.plist UIKit Keys

【讨论】:

  • 根据文档,默认情况下密钥为 no,即不继承。这很奇怪不是吗?默认行为接缝是继承。 developer.apple.com/library/ios/#documentation/general/…
  • 正确——我也不明白。如果我不想继承,我是否将键设置为 YES 或 NO?我说“不”,但这并没有解决我的问题。
猜你喜欢
  • 2014-06-08
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多