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