42

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

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

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

4

4 回答 4

53

根据苹果规范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”属性设置为“是”?出于性能原因,默认情况下将其设置为 NO,但将其设置为 yes 可能会给您想要的效果。

于 2013-03-19T02:56:29.880 回答
0

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

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