Zgodnie z dokumentacją dla UIVIew @property(nonatomic) CGFloat alpha
Wartość tej właściwości to liczba zmiennoprzecinkowa z zakresu od 0,0 do 1,0, gdzie 0,0 oznacza całkowitą przezroczystość, a 1,0 oznacza całkowitą nieprzezroczystość. Ta wartość wpływa tylko na bieżący widok i nie wpływa na żadne z jego osadzonych widoków podrzędnych.
Mam następujący widok kontenera:
self.myView.backgroundColor = [UIColor blackColor];
self.myView.alpha = 0.5;
[self addSubview:self.myView];
Następnie dodaj widoki podrzędne do „myView”
[myView addSubView anotherView];
anotherView.alpha = 1;
NSLog(@"anotherView alpha = %f",anotherView.alpha); // prints 1.0000 as expected
Ale `` anotherView '' ma alfa na ekranie (nie jest nieprzejrzysty, jak oczekiwano)
Jak to możliwe i co można zrobić?
ios
objective-c
uiview
alpha-transparency
Avner Barr
źródło
źródło
self.myView
? i dodaj kolejny widok, taki jak[self.self addSubview:self.myView];
alpha
wartość, która jest pomnożonąalpha
wartością wszystkich podglądów . np jeśli alfa subviews0.8
i alpha Superview był1.0
, ale go zmienić0.6
, alfa subviews jest wciąż ten sam,0.8
. wartość alfa renderowanego widoku podrzędnego jest zmieniana tylko z0.8
na0.48
.Odpowiedzi:
Myślę, że to błąd w dokumentacji. Należy to zgłosić pod adresem bugreport.apple.com.
Wszystko, co widzę po krótkich badaniach, sugeruje, że widzisz, jak zawsze się zachowywał, i moje własne testy również to pokazują.
Alfa widoku jest stosowana do wszystkich widoków podrzędnych.
Być może wszystko, czego potrzebujesz, to,
[[UIColor blackColor] colorWithAlphaComponent:0.5]
ale jeśli nie, będziesz musiał uczynić widok rodzeństwem zamiast dziecka.źródło
Nie ustawiaj alfa bezpośrednio w widoku nadrzędnym. Zamiast tego użyj poniższego wiersza kodu, który zastosuje przezroczystość do widoku nadrzędnego bez wpływu na jego widoki podrzędne.
[parentView setBackgroundColor: [[UIColor clearColor] colorWithAlphaComponent: 0.5]];
źródło
Szybko
view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)
AKTUALIZACJA DLA SWIFT 3
view.backgroundColor = UIColor.white.withAlphaComponent(0.5)
źródło
Ustawienie Krycia koloru tła zamiast alfa nie wpłynie na jego widoki potomne.
Lub możesz ustawić programowo
var customView:UIView = UIView() customView.layer.opacity = 0.3
Otóż to. Miłego kodowania !!!
źródło
Jeśli lubisz scenorysy, umieść
User Defined Runtime Attribute
widok wIdentity Inspector
:Key Path: backgroundColor
,Type: Color
,Value:
Na przykład koloru białego Krycie 50%.źródło
Najprostszym rozwiązaniem omawianym jest zmiana alfy w następujący sposób: Zaktualizowana wersja dla Xcode 8 Swift 3 to:
yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)
Cel C:
yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
Zapoznaj się z dokumentacją programisty Apple tutaj: https://developer.apple.com/reference/uikit/uiview/1622417-alpha
źródło
W Swift 4.2 i Xcode 10.1
Nie dodawaj koloru i wartości alfa poprzez scenorys. W takim przypadku będzie działać tylko podejście programowe.
transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
źródło
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
container
widoku jako nadzoru,anotherView
amyView
oba są w widoku podrzędnymcontainer
,anotherView
nie jest w widoku podrzędnymmyView
.źródło
Na razie jest tylko jeden sposób, aby widok nadrzędny był przezroczysty i nie umieszczaj żadnych widoków podrzędnych wewnątrz (nie umieszczaj żadnych widoków jako podwidoku) widoku nadrzędnego, umieść te widoki podrzędne poza widokiem nadrzędnym. Aby widok rodzica był przezroczysty, możesz to zrobić za pomocą scenorysu.
//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.
źródło
Zapoznaj się z wytłuszczonym opisem w dokumentacji Xcode.
źródło