web-dev-qa-db-ja.com

UIViewにアルファを設定すると、サブビューにアルファが設定されますが、これは起こるべきではありません

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」には画面上にアルファがあります(期待どおりに不透明ではありません)

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

80
Avner Barr

これはドキュメントのバグだと思います。 bugreport.Apple.comに提出してください。

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

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

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

111
Abhi Beckert

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

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

42
Anooj VM

In Swift

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

PDATED FOR Swift

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

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

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

またはプログラムで設定できます

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

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

18
MRizwan33

ストーリーボードが好きなら、User Defined Runtime AttributeIdentity Inspector

Key Path: backgroundColorType: ColorValue:例不透明度50%の白色。

15
Ralf Hundewadt

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

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

目標C:

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

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

6

In Swift 4.2およびXcode 10.1

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

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

少し複雑なソリューションを次に示します。

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

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

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

containerビューをスーパービューとして使用します。anotherViewmyViewは両方ともcontainerのサブビューであり、anotherViewmyView

2
likid1412

今のところParent Viewを透明にし、子ビューをサブビューとして入れない(サブビューとしてビューを入れない)方法は1つしかありません。その子ビューを親の外側に置きます。見る。親ビューを透明にするには、ストーリーボードを使用してこれを実行できます。

//Transparent the parentView

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

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

1
Purnendu roy

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

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

0
Danyun Liu