2013-03-24 2 views
0

두 개의 형제보기가 있습니다. 회색 라벨과 녹색 버튼이 아래에 있습니다. 웬일인지 색을 지우려면 label.backgroundColor을 설정하고 label.layer.backgroundColor을 회색으로 설정해야합니다. 버튼 색상은 녹색입니다. 화면에 회색이 표시 될 것으로 예상됩니다 (라벨이 버튼 위에 있으므로). 하지만 내가 보는 것은 녹색 (단추의 색)입니다. 왜?iOS :보기 배경색이 투명 할 때 레이어 배경색이 표시되지 않습니다.

편집 : 관련 코드

// in my custom cell 
-(void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    // customize label 
    _label.layer.cornerRadius = 5; 
    _label.layer.backgroundColor = [UIColor grayColor].CGColor; 
    _label.backgroundColor = [UIColor clearColor]; 
    _label.layer.masksToBounds = NO; 


    // customize button   
    // show shadow and rounded corner at the same time 

    _button.backgroundColor = [UIColor clearColor]; 
    _button.layer.backgroundColor = [UIColor greenColor].CGColor; 
    _button.layer.masksToBounds = NO; 
    _button.layer.cornerRadius = 10.0f; 

    self.layer.masksToBounds = NO; 
    self.layer.cornerRadius = 10.0f; 
    self.layer.shadowOpacity = 0.5f; 
    self.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:_button.bounds cornerRadius:10.0f].CGPath; 
    self.layer.shadowOffset = CGSizeMake(0.0f, 4.0f); 
    self.layer.shadowRadius = 2.0f; 

} 
+0

"어떤 이유로"왜? 우리가 당신의 결정 뒤에 근거를 알면, 우리는 당신을 더 잘 도울 수 있습니다. – duci9y

+0

여기에 relavent 코드를 넣으세요 :) – iPatel

+0

'label.layer.masksToBounds = NO'를 유지하면서 라벨의 모서리를 둥글게해야하기 때문에 (그렇지 않으면 스크롤이 심각하게 뒤틀리게됩니다). 따라서 유일한 옵션은'label.backgroundColor' 대신'label.layer.backgroundColor'를 설정하는 것입니다. – Philip007

답변

11

마지막으로 나는 해결책을 발견 : 이것에

// both set to clear color eventually 
_label.layer.backgroundColor = [UIColor grayColor].CGColor; 
_label.backgroundColor = [UIColor clearColor]; 

: 단순히이 두 줄의 순서를 반대로

// both set to gray eventually 
_label.backgroundColor = [UIColor clearColor]; 
_label.layer.backgroundColor = [UIColor grayColor].CGColor; 

이유는 UILabel에 대한 것입니다 (UIView는 아니지만 나중에 자세히 설명합니다). 의 배경색을 설정하면 해당 레이어의 배경색이 Nothing으로 설정됩니다.. 그러나 레이블 배경색을 먼저 설정하고 레이어 배경색을 나중에 설정하면 둘 다 자체 방식으로 이동하면 화면에 레이블 배경색이 표시됩니다.

그러나 UIView의 경우 완전히 다른 이야기입니다. 배경색보기 및 해당 레이어의 배경색은 같은 것입니다. 따라서 마지막으로 설정된 것이 우선합니다.

그러나 위의 관찰 내용에 대해서는 설명서에서 찾을 수 없습니다. 누군가가 들어와 도움을 줄 수 있기를 바랍니다.

+0

UIView는 레이어 백업이며 뷰와 레이어는 두 가지가 아니라 하나입니다. 뷰는 자체적으로 그려지지 않으며 뷰 및/또는 레이어를 구성하지만 레이어 만 그려집니다. – Pascal

+0

파스칼, 나는 그랬던 것처럼 생각했습니다. 그러나이 포스트에서 적어도 배경색, 뷰 및 레이어에 대해 실험 한 것과 같이 레이어의 동작은 크게 다릅니다. – Philip007

+0

레이블의 경우 겉으로보기에는 있지만 UIView IIRC에는 표시되지 않습니다. UIView는 그것의 레이어 또는 그 레이어를 어떻게 설정하는지에 따라'- (void) drawLayer : (CALayer *) inContext : (CGContextRef) ctx' 레이어를 그립니다. – Pascal

관련 문제