我有一个UIView
我用以下方式定义它的边界:
self.layer.borderColor = [UIColor blackColor].CGColor;
self.layer.borderWidth = 3;
我将一个子视图附加到这个UIView
,当我将子视图移动到边框上时,它会在它下面。这是预期的行为吗?反正有没有让子视图放在它上面?
我有一个UIView
我用以下方式定义它的边界:
self.layer.borderColor = [UIColor blackColor].CGColor;
self.layer.borderWidth = 3;
我将一个子视图附加到这个UIView
,当我将子视图移动到边框上时,它会在它下面。这是预期的行为吗?反正有没有让子视图放在它上面?
根据苹果规范: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];
和效果:
根据您的视图结构,将子视图添加到主视图的父视图可能更容易。然后它可以与主视图重叠,并按照您的要求覆盖边框。
您是否尝试将超级视图的“clipsToBounds”属性设置为“是”?出于性能原因,默认情况下将其设置为 NO,但将其设置为 yes 可能会给您想要的效果。
在适合您的特定位置插入图层:
self.layer.insertSublayer(sublayer, at: 0)