UIView에 알파를 설정하면 발생하지 않아야하는 하위 뷰에 알파가 설정됩니다.


86

문서에 따르면 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

anotherView :) 생성의 모든 코드를 추가하고 오타라고 생각하지만 초기화 self.myView하시겠습니까? 및 추가 anotherView을 등처럼[self.self addSubview:self.myView];
iPatel

1
실제로 문서는 정확합니다. 포함 된 하위보기에 영향을주지 않으며 하위보기의 알파는 항상 동일합니다. 그러나 렌더링 된보기에는 alpha모든 하위보기의 alpha값이 곱해진 값이 있습니다. 예를 들어 subviews alpha 0.8와 superview의 alpha가 1.0였지만으로 변경 0.6하면 subviews alpha는 여전히 동일 0.8합니다. 렌더링 하위 뷰의 알파 값은 변경되는 0.80.48.
holex

답변:


117

나는 이것이 문서의 버그라고 생각합니다. bugreport.apple.com에 제출해야합니다.

약간의 빠른 조사 후에 내가 볼 수있는 모든 것은 당신이보고있는 것이 항상 어떻게 행동했는지를 시사합니다. 그리고 내 테스트도 그것을 보여줍니다.

보기의 알파는 모든 하위보기에 적용됩니다.

아마도 당신이 필요로하는 전부는 [[UIColor blackColor] colorWithAlphaComponent:0.5]하지만 그렇지 않다면보기를 아이 대신 형제로 만들어야 할 것입니다.


21
+1. FWIW, 나는 문서가 매우 명확하지 않다면 틀림없이 정확하다고 생각합니다 (모든 실제적인 목적에 맞지 않는 지점까지). 하위 뷰의 알파는 영향을 받지만 알파 값에는 영향을주지 않습니다. 이것은 숨겨진 속성에 대해 동일한 동작이라고 생각합니다. 숨김을 설정하면 하위보기가 숨겨 지지만 하위보기 숨김 속성이 설정되지는 않습니다.
Bjorn Roche

2
uipopover와 같은 뷰를 표시해야했지만 iphone에서 [[UIColor blackColor] colorWithAlphaComponent : 0.5]로 uiviewcontroller를 만들어야합니다. 감사합니다
Alok

2
나는 문서가 "아마도 정확하다"고 생각하지 않는다. 현실 세계에서 개발자는 문서를 읽고 하위 알파가 영향을받지 않는다고 믿습니다. 실제로 합성 된 결과는 알파가 수정 된 것처럼 보일 것입니다. 잘못된 문서의 경우 일뿐입니다.
Womble

43

부모 뷰에서 직접 알파를 설정하지 마십시오. 대신 하위 뷰에 영향을주지 않고 parentview에 투명성을 적용하는 아래 코드 줄을 사용합니다.

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


이 코드는 최신 ios 및 xcode에서 작동하지 않습니다. 누구든지 다른 아이디어가 있습니까?
Moxarth

1
우수한!! 신속한 사용 4 : parentView.backgroundColor UIColor.black.withAlphaComponent = (0.5)
케쉬 Yembaram

훌륭한 솔루션입니다.
iLearner

27

신속하게

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

SWIFT 3 용으로 업데이트 됨

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

2
이것은 질문을 해결하지 않습니다.
데이비드 베리

" 'UIColor'유형의 값에 'colorWithAlphaComponent'멤버가 없습니다."라는 오류가 표시됩니다.
Krivvenz

1
@Krivvenz 안녕하세요. 'colorWithAlphaComponent'가 'withAlphaComponent'로 이름이 변경되었습니다. 내 편집 된 답변을 참조하십시오.
Nazarii Stadnytskyi

이 코드는 작동하지 않습니다. 푸시 된 뷰를 투명하게 볼 수 없습니다. 누구든지 다른 생각이 있습니까?
Moxarth

21

알파 대신 배경색의 불투명도를 설정해도 하위 뷰에는 영향을주지 않습니다.

  1. 보기를 선택하십시오.
  2. 배경색보다 속성 관리자로 이동
  3. "기타"를 클릭하십시오
  4. 불투명도를 30 %로 설정

또는 프로그래밍 방식으로 설정할 수 있습니다.

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

그게 다야. 행복한 코딩 !!!


이를 프로그래밍 방식으로 수행 할 수있는 방법이 있습니까?
DCIndieDev

@DCIndieDev 죄송합니다 UIView의 속성으로 불투명도를 찾지 못했습니다. 그래서 스토리 보드에 의해 설정됩니다.
MRizwan33

이것은 훌륭한 대답입니다. 훌륭하게 일했습니다.
Joe Susnick

이것이 허용되는 대답이어야합니다. 필요에 따라 작업했습니다. 감사.
Missa

1
@ MRizwan33 [your UIView]에서 opacity 속성에 액세스 할 수 있습니다 .layer.opacity
Missa

16

스토리 보드가 마음에 들면 User Defined Runtime Attribute다음 위치에보기를 입력하십시오 Identity Inspector.

Key Path: backgroundColor, Type: Color, Value:불투명도 50 % 흰색을 예.


좋은 대답! Attributes Inspector에서 뷰의 알파를 1로 설정했습니다. Identity Inspector에서 위와 같이 Opacity 50 %로 키 경로를 삽입합니다. 이제보기의 불투명도는 50 %이지만 하위보기의 불투명도는 여전히 100 %입니다. 나는 알파와 불투명도가 같은 것이 아니라고 생각합니다.
etayluz

6

논의 된 가장 간단한 해결책은 다음과 같이 알파를 변경하는 것입니다. Xcode 8 Swift 3의 업데이트 된 버전은 다음과 같습니다.

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

목표 C :

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

https://developer.apple.com/reference/uikit/uiview/1622417-alpha 에서 Apple 개발자 문서를 참조하십시오.


네, 이것을 적용했지만보기가 투명 해지지 않았습니다. 이 코드를 이전에 여러 번 사용했습니다. 그러나 이번에는 작동하지 않습니다. 그리고 내 시야를 단색의 검은 색으로 표시합니다. 그래서 대체 방법이나 새로운 iOS 업데이트로 변경 되었습니까?
Moxarth

아마도 yourParentView 뒤에있는 뷰는 검은 색이어야합니다. 스토리 보드에서 xib를 확인하고 코드가 다른 곳에서 검은 색으로 설정되어 있는지 확인하세요. 이것이 도움이
Ankit Kumar Gupta

나는 단지 한보기에서 다른보기를 밀고있다. 푸시 된 뷰는이 코드 후에 투명하게 나타납니다. 나는 그것을 더 일찍 여러 번 사용했다. 이것만큼 간단합니다. -> 설정 * set = [[설정 할당] initWithNibName : @ "settings"bundle : nil]; -> set.view.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent : 0.3f]; -> [self.navigationController pushViewController : set animated : YES];
Moxarth

xib 또는 스토리 보드를 사용하고 있습니까?
Ankit Kumar Gupta

하지만 지금은이 코드를 사용하고 있으며 작동하지 않습니다. 푸시 된 뷰는 우리가 제공 한 색상 중 투명하지 않은 단색으로 나타납니다.
Moxarth

4

Swift 4.2 및 Xcode 10.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모두 서브 뷰가에 container, anotherView에 하위 뷰 아니다 myView.


2

현재로서는 부모 뷰를 투명하게 만들고 부모 뷰 안에 자식 뷰를 넣지 않고 (어느 뷰도 하위 뷰로 넣지 마십시오) 부모 뷰 외부에 자식 뷰를 넣는 방법은 한 가지뿐입니다 . 부모보기를 투명하게 만들려면 스토리 보드를 통해이 작업을 수행 할 수 있습니다.

//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.