4

2つの兄弟ビューがあります。灰色のラベルと緑色のボタンです。ボタンは下にあります。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

最後に私は解決策を見つけました:この2行の順序を逆にするだけです:

// 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の場合、これはまったく別の話です。ビューの背景色とそのレイヤーの背景色は同じものです。したがって、最後に設定された方が優先されます。

しかし、私はドキュメントで上記の観察について何も見つけることができません。誰かが介入して助けてくれることを願っています。

于 2013-03-24T15:03:20.717 に答える
0

ビューのisOpaque値をfalseに設定することを忘れないでください。これは、IBではデフォルトでtrueになります。

于 2018-04-20T10:03:41.427 に答える