子视图出现在超级视图layer.border下面?

时间:2013-03-19 02:53:54

标签: iphone ios cocoa-touch uiview calayer

我有一个UIView,我用以下方式定义它的边框:

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

我将子视图附加到此UIView,当我将子视图移到边框上时,它会在其下面。这是预期的行为吗?反正有没有将子视图放在上面?

4 个答案:

答案 0 :(得分:37)

根据Apple specificationIt is composited above the receiver’s contents and sublayers.

因此,边框将始终位于所有子视图之上,即使您将子视图放在前面等等。

所以我做了一个背景视图来伪造边框。

E.g:

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

答案 1 :(得分:1)

根据您的视图结构,可能更容易将子视图添加到主视图的父级。然后它可以与主视图重叠,并按照您的要求覆盖边框。

答案 2 :(得分:0)

您是否尝试将superview的'clipsToBounds'属性设置为YES?出于性能原因,默认设置为NO,但将其设置为yes可能会为您提供所需的效果。

答案 3 :(得分:0)

在适合您的特定位置插入图层:

self.layer.insertSublayer(sublayer, at: 0)