UIViewでアルファを設定すると、サブビューにアルファが設定されますが、これは発生しないはずです。


85

のドキュメントによると 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」には画面にアルファがあります(予想どおり不透明ではありません)

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


サブビューを追加してアルファを設定する順序が重要かもしれません。さまざまなシーケンスで遊んでみてください。
Joride 2013

anotherViewの作成コードをすべて追加してください:)また、タイプミスだと思いますが、初期化してもself.myViewよろしいですか?そして、次のようなanotherViewを追加します[self.self addSubview:self.myView];
iPatel 2013

1
確かに、ドキュメントは正しいです。埋め込みサブビューには影響せず、サブビューのアルファは常に同じですが、レンダリングされたビューのalpha値は、すべてのサブビューのalpha値に乗算されます。たとえば、サブビューのアルファ0.8とスーパービューのアルファが1.0であったが、それをに変更した0.6場合、サブビューのアルファは同じまま0.8です。レンダリングされたサブビューのアルファ値は、から0.8にのみ変更され0.48ます。
holex 2014

回答:


117

これはドキュメントのバグだと思います。bugreport.apple.comでファイルする必要があります。

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

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

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


21
+1。FWIW、非常に不明確な場合でも、ドキュメントはほぼ間違いなく正しいと思います(すべての実用的な目的で正しくないという点で)。サブビューのアルファは影響を受けますが、アルファ値は影響を受けません。これは、隠されたプロパティの場合と同じ動作だと思います。hiddenを設定すると、サブビューは非表示になりますが、サブビューのhiddenプロパティは設定されません。
ビョルンロシュ

2
私はuipopoverのようなもののiphone.Iでいくつかのことが[[UIColor blackColor] colorWithAlphaComponent:0.5]とのUIViewControllerを作成する必要がビューを表示する必要があった、それが働いた.thanks
Alok

2
ドキュメントが「ほぼ間違いなく正しい」とはまったく思わない。現実の世界では、開発者はドキュメントを読み、子アルファは影響を受けないと信じています。実際には、合成された結果は、アルファが変更されたかのようになります。これは、ドキュメントが不適切な場合にすぎません。
ウォンブル2015

43

親ビューに直接アルファを設定しないでください。代わりに、子ビューに影響を与えることなく親ビューに透過性を適用する以下のコード行を使用します。

[parentView setBackgroundColor:[[UIColor clearColor] colorWithAlphaComponent:0.5]];


このコードは、最新のiosおよびxcodeでは機能しません。誰かが異なるアイデアを持っていますか?
Moxarth 2017年

1
優秀な!!迅速な4の使用:parentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
Rakesh Yembaram 2018年

素晴らしいソリューション。
iLearner

27

迅速に

view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)

SWIFT3用に更新

view.backgroundColor = UIColor.white.withAlphaComponent(0.5)

2
これは、尋ねられた質問に対処していません。
デビッドベリー

これにより、「タイプ 'UIColor'の値にメンバー 'colorWithAlphaComponent'がありません」というエラーが発生します。
Krivvenz 2016年

1
こんにちは@ Krivvenz、 'colorWithAlphaComponent'は 'withAlphaComponent'に名前が変更されました。私の編集した答えを参照してください。
Nazarii Stadnytskyi 2016年

このコードは機能していません。プッシュされたビューを透明として表示することはできません。誰か他のアイデアはありましたか?
Moxarth 2017年

21

アルファの代わりに背景色の不透明度を設定しても、子ビューには影響しません。

  1. ビューを選択します。
  2. 背景色よりも属性インスペクターに移動します
  3. 「その他」をクリック
  4. 不透明度を30%に設定します

または、プログラムで設定することもできます

var customView:UIView = UIView()
customView.layer.opacity = 0.3

それでおしまい。ハッピーコーディング!!!


これをプログラムで行う方法はありますか?
DCIndieDev 2018

@DCIndieDev申し訳ありませんが、UIViewのプロパティとして不透明度が見つかりませんでした。ストーリーボードによって設定されます。
MRizwan33 2018

これは素晴らしい答えです。うまくいきました。
ジョーサスニック2018

これは受け入れられた答えであるはずです、必要に応じて働きました。ありがとう。
ミサ2018

1
@ MRizwan33 [your UIView] .layer.opacityからopacityプロパティにアクセスできます
Missa

16

ストーリーボードが好きな場合User Defined Runtime Attributeは、Identity Inspector

Key Path: backgroundColorType: ColorValue:不透明度は50%で白色を例えば。


素晴らしい答えです!属性インスペクターで、ビューのアルファを1に設定しました。Identity Inspectorで、上記のように不透明度50%のキーパスを挿入します。ビューの不透明度は50%になりましたが、サブビューの不透明度は100%のままです。アルファと不透明度は同じものではないと思います。
etayluz 2016

6

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

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

目的C:

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

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


はい、これを適用しましたが、ビューが透明になりませんでした。私は以前にこのコードを何度も使用しました。しかし、今回は機能していません。私の見解を黒一色で表示しています。それで、別の方法がありますか、それとも新しいiOSアップデートで変更されましたか?
Moxarth 2017年

おそらく、yourParentViewの背後にあるビューは黒一色である必要があります。ストーリーボードでxibを確認し、他の場所から黒に設定されているかどうかをコードで確認してください。これがお役に立て
ば幸いです

あるビューから別のビューをプッシュしているだけです。このコードの後、プッシュされたビューは透明に表示されます。私は以前に何度もそれを使用しました。これと同じくらい簡単です。->設定* set = [[settings alloc] initWithNibName:@ "settings" bundle:nil]; -> set.view.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent:0.3f]; -> [self.navigationController pushViewController:setanimated:YES];
Moxarth 2017年

xibまたはストーリーボードを使用していますか?
Ankit Kumar Gupta 2017

しかし今、私はこのコードを使用していますが、機能していません。プッシュされたビューは、指定した色に応じて単色で表示され、透明ではありません。
Moxarth 2017年

4

Swift4.2およびXcode10.1では

ストーリーボードから色やアルファ値を追加しないでください。この場合、プログラムによるアプローチのみが機能します。

transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)

@iOSありがとう、これは私を助けてくれました。
Raghuram

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


2

今のところ、親ビューを作成する方法は1つだけです。透明にし、子ビューを内側に配置しない(ビューをサブビューとして配置しない)、その子ビューを親ビューの外側に配置するありません。親ビューを透明にするには、ストーリーボードを介してこれを行うことができます。

//Transparent the parentView

parentView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.8)

もう一方のビューを親ビューの外側に配置します。それは魅力のように機能します。


0

Xcodeドキュメントの太字の説明を参照してください。

このプロパティの値は、0.0から1.0の範囲の浮動小数点数です。ここで、0.0は完全に透明を表し、1.0は完全に不透明を表します。このプロパティの値を変更すると、現在のビューのアルファ値のみが更新されます。ただし、そのアルファ値によって付与される透明度は、サブビューを含むビューのすべてのコンテンツに影響します。たとえば、アルファ値が0.5の親ビューに埋め込まれているアルファ値が1.0のサブビューは、そのアルファ値も0.5であるかのように画面に表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.