42

UIView次の方法で境界線を定義する があります。

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

サブビューを this にアタッチし、サブビューをUIView境界線の上に移動すると、その下に移動します。これは意図した動作ですか?サブビューをその上に置く方法はありますか?

4

4 に答える 4

53

Appleの仕様によると: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];

そして効果:

ここに画像の説明を入力

于 2013-03-19T03:38:21.040 に答える
1

ビューの構造によっては、サブビューをメイン ビューの親に追加する方が簡単な場合があります。その後、メイン ビューに重ねることができ、要求どおりに境界線を重ねます。

于 2016-01-11T22:34:44.433 に答える
0

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

于 2013-03-19T02:56:29.880 に答える
0

あなたに合った特定の位置にレイヤーを挿入します:

self.layer.insertSublayer(sublayer, at: 0)
于 2020-02-21T23:58:44.927 に答える