2013-03-19 14 views
21

私はそれが次のように境界線の定義するUIViewを持っている:サブビューはsuperviews layer.borderの下に表示されますか?

self.layer.borderColor = [UIColor blackColor].CGColor; 
    self.layer.borderWidth = 3; 

私はこのUIViewにサブビューを添付し、そして私は国境を超えるサブビューを移動すると、それはそれの下に行きます。これは意図された動作ですか?サブビューを上に置くためにとにかくありますか?

+1

リンゴの医者は、「この境界線は、このプロパティで指定された値によって受信者の境界線から挿入されます。受信者のコンテンツとサブレイヤの上に合成されているので、ボーダーはすべてのレイヤーの上にあります(サブレイヤを含む) –

+0

ヒント@GuoLuchuan!たぶんbackGround画像を別のUIViewの上に重ねて使用するかもしれません。 –

+0

@aăâはいあなたが正しいです。多分誰かがそれを処理するための完璧な方法を持っています。私たちはまた、完璧な方法があるかどうかも考えました。 –

答えて

29

It is composited above the receiver’s contents and sublayers.

ので、ボーダーは常にあなたがそうで前にあなたのサブビューを持参した場合でも、すべてのサブビューの上になります。

私はボーダーを偽装する背景を作ります。

例えば:

UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)]; 
backgroundView.backgroundColor = [UIColor blackColor]; 
backgroundView.clipsToBounds = NO; 

UIView *bView = [[UIView alloc] initWithFrame:CGRectInset(backgroundView.bounds, 3, 3)]; 
bView.backgroundColor = [UIColor redColor]; 

UIView *cView = [[UIView alloc] initWithFrame:CGRectMake(-50, -50, 100, 100)]; 
cView.backgroundColor = [UIColor yellowColor]; 
[bView addSubview:cView]; 

[backgroundView addSubview:bView]; 

[self.window addSubview:backgroundView]; 

と効果:

enter image description here

+0

私はまた、境界線のビューを保持するビューと、その上にサブビューとして行くと思われるビューを作成し、境界線のビューが最初に接続されていることを確認できます。 –

+0

@StackOverFlowRiderはい、 'CustomView'を作ることができます。その' .view'は 'border'で、' CustomView'は 'UIView'プロパティーが' yourView'という名前になります。 'yourView'は本当に便利なビューです。' yourView'は 'CustomView'の' subview'です。 'view' –

+0

その答えはbtwです。 –

0

スーパービューの 'clipsToBounds'プロパティをYESに設定しようとしましたか?これは、パフォーマンス上の理由から、デフォルトではNOに設定されますが、yesに設定すると、探している効果が得られる場合があります。 Apple specificationによると

+0

このビューはsuperviews境界の外側にあるため、noに設定する必要があります。 –

0

ビューの構造によっては、あなたのメインビューのにサブビューを追加する方が簡単かもしれません。それはメインビューとオーバーラップし、要求したとおりに境界にオーバーレイします。

関連する問題