4

我有两个兄弟视图:一个灰色标签和一个绿色按钮,按钮在下面。出于某种原因,我需要设置label.backgroundColor为清除颜色并设置label.layer.backgroundColor为灰色。按钮颜色为绿色。我希望在屏幕上看到灰色(因为标签位于按钮顶部)。但我看到的只是绿色(按钮的颜色)。为什么?

编辑:相关代码

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

}
4

2 回答 2

16

最后我找到了解决方案:只需颠倒这两行的顺序:

// 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,稍后会详细介绍)设置其背景颜色会将其图层的背景颜色设置为 nil。但是如果我们先设置标签背景颜色,然后再设置图层背景颜色,那么两者各走各的,那么我们会在屏幕上看到标签背景颜色。

但是对于 UIView 来说,情况就完全不同了:view 背景颜色和它的 layer 的背景颜色是一回事。因此,以最后一组为准。

但是,我在文档中找不到有关上述观察的任何信息。希望有人可以介入并提供帮助。

于 2013-03-24T15:03:20.717 回答
0

不要忘记将视图的 isOpaque 值设置为 false。这在 IB 中默认为 true。

于 2018-04-20T10:03:41.427 回答