Ustawienie alpha Na UIView ustawia alpha na jej podwidach, które nie powinny się zdarzyć

Zgodnie z dokumentacją dla UIVIew @property(nonatomic) CGFloat alpha

Wartość tej właściwości jest liczbą zmiennoprzecinkową z zakresu 0.0 do 1.0, gdzie 0.0 oznacza całkowicie przezroczysty, a 1.0 oznacza całkowicie nieprzezroczyste. ta wartość ma wpływ tylko na bieżący widok i nie ma wpływu na żaden z jego osadzonych podglądów podrzędnych.

Mam widok kontenera skonfigurowany w następujący sposób:

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

A następnie dodaj podview do 'myView'

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

Ale " anotherView " mA Alfę na ekranie (nie jest nieprzezroczysta zgodnie z oczekiwaniami)

Jak to możliwe i co można zrobić?
Author: MRizwan33, 2013-09-08

8 answers

Myślę, że to błąd w dokumentacji. Należy go złożyć na bugreport.apple.com.

Wszystko, co widzę po krótkim badaniu, sugeruje, że widzisz to, jak zawsze się zachowywało, a moje własne testy również to pokazują.

Alfa widoku jest stosowana do wszystkich podwidywań.

Być może wszystko czego potrzebujesz to [[UIColor blackColor] colorWithAlphaComponent:0.5], ale jeśli nie, będziesz musiał uczynić widok rodzeństwem zamiast dzieckiem.

 101
Author: Abhi Beckert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-08 08:52:31

Nie ustawiaj Alfy bezpośrednio w widoku nadrzędnym. Zamiast tego użyj poniższej linii kodu, która zastosuje przezroczystość do widoku parentview bez wpływu na widoki potomne.

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

 35
Author: Anooj VM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-27 09:41:34

In swift

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

AKTUALIZACJA DLA SWIFT 3

view.backgroundColor = UIColor.white.withAlphaComponent(0.5)
 22
Author: Nazarii Stadnytskyi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-12 17:53:26

Jeśli lubisz storyboardy, umieść User Defined Runtime Attribute dla swojego widoku w Identity Inspector:

Key Path: backgroundColor, Type: Color, Value: np. kolor biały z nieprzezroczystością 50 %.

 13
Author: Ralf Hundewadt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-05 12:54:20

Ustawienie krycia koloru tła zamiast alfa nie będzie miało wpływu na widoki potomne.

  1. Wybierz widok.
  2. Przejdź do inspektora atrybutów niż kolor tła
  3. Kliknij na "inne"
  4. Ustaw krycie na 30%

To wszystko. Szczęśliwego Kodowania!!!

 11
Author: MRizwan33,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-25 14:18:37

Najprostszym rozwiązaniem jest zmiana Alfy w następujący sposób : Zaktualizowana wersja dla Xcode 8 Swift 3 to:

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

Objective C:

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

Zapoznaj się z dokumentami Apple Developer Docs tutaj : https://developer.apple.com/reference/uikit/uiview/1622417-alpha

 5
Author: Ankit Kumar Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 11:39:58

Oto nieco złożone rozwiązanie:

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

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

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

Użyj widoku container jako superview, anotherView i myView są zarówno subview w container, anotherView nie jest subview w myView.

 2
Author: likid1412,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-17 03:39:52

Na razie jest tylko jeden sposób, aby widok rodzica był przezroczysty i nie umieszczał żadnych widoków potomnych w widoku rodzica( nie umieszczał żadnych widoków jako subview). Aby widok rodzica był przezroczysty, możesz to zrobić za pomocą storyboard.

//Transparent the parentView

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

Umieść drugi widok poza widokiem nadrzędnym. Będzie działać jak urok.

 0
Author: Purnendu roy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-26 13:30:28