91

のドキュメントによると、UIVIew @property(nonatomic) CGFloat alpha

このプロパティの値は、0.0 から 1.0 の範囲の浮動小数点数です。0.0 は完全に透明であることを表し、1.0 は完全に不透明であることを表します。 この値は現在のビューのみに影響し、埋め込まれたサブビューには影響しません。

次のように構成されたコンテナー ビューがあります。

self.myView.backgroundColor = [UIColor blackColor];
self.myView.alpha = 0.5;
[self addSubview:self.myView];

そして、「myView」にサブビューを追加します

[myView addSubView anotherView];
anotherView.alpha = 1;
NSLog(@"anotherView alpha = %f",anotherView.alpha); // prints 1.0000 as expected

しかし、「anotherView」には画面上にアルファがあります (予想どおり不透明ではありません)

これはどのように起こり、何ができるのでしょうか?

4

10 に答える 10

123

これはドキュメントのバグだと思います。bugreport.apple.com にファイルしてください。

ちょっとした簡単な調査の後に私が見ることができるものはすべて、あなたが見ているのはそれが常にどのように振る舞うかを示唆しており、私自身のテストもそれを示しています.

ビューのアルファはすべてのサブビューに適用されます。

おそらく必要なのは[[UIColor blackColor] colorWithAlphaComponent:0.5]それだけですが、そうでない場合は、ビューを子ではなく兄弟にする必要があります。

于 2013-09-08T08:52:31.480 に答える
17

ストーリーボードが好きなら、User Defined Runtime Attributeあなたのビューに を入れてくださいIdentity Inspector:

Key Path: backgroundColor、たとえばType: ColorValue:不透明度 50% の白色。

于 2014-08-05T12:54:20.013 に答える
6

説明した最も簡単な解決策は、アルファを次のように変更することです。Xcode 8 Swift 3 の更新バージョンは次のとおりです。

yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)

目標 C:

yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];

ここで Apple Developer Docs を参照してください: https://developer.apple.com/reference/uikit/uiview/1622417-alpha

于 2016-12-14T11:39:58.640 に答える
2

これは少し複雑な解決策です:

UIView *container;
UIView *myView;
UIView *anotherView;

myView.alpha = 0.5;
[container addSubview:myView];

anotherView.alpha = 1;
[container addSubview:anotherView];

containerビューをスーパービューとして使用し、anotherView両方myViewとも ではサブビューですが、 ではサブビューでcontaineranotherViewありませんmyView

于 2016-02-17T03:39:52.813 に答える