且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

带有圆角和边框的UIView有错误的边缘颜色

更新时间:2023-01-05 15:34:16

要解决此问题,请设置背景颜色子视图到 clearColor ,然后使用自定义视图类的 drawRect 方法绘制背景颜色。下面是视图类的代码。

To work around the problem, set the background color of the subviews to clearColor and then draw the background color using the drawRect method of a custom view class. Here's the code for the view class.

@interface WorkAroundView : UIView
@end

@implementation WorkAroundView
- (void)drawRect:(CGRect)rect
{
    CGFloat margin = self.layer.borderWidth;
    CGRect  background;
    background.origin.x = margin;
    background.origin.y = margin;
    background.size.width  = self.bounds.size.width  - 2 * margin;
    background.size.height = self.bounds.size.height - 2 * margin;

    CGContextRef context = UIGraphicsGetCurrentContext();
    [[UIColor blackColor] set];
    CGContextFillRect( context, background );
}
@end

下面是如何使用自定义视图类。这里从你发布的唯一的真正的变化是subview的背景颜色设置为clearColor。

And here's how you would use the custom view class. The only real change here from what you posted is that the background color for the subviews is set to clearColor.

UIView *outerView = [[UIView alloc] initWithFrame:CGRectMake(360, 200, 320, 320)];
[self.view addSubview:outerView];
outerView.backgroundColor = [UIColor whiteColor];

WorkAroundView *innerView1 = [[WorkAroundView alloc] initWithFrame:CGRectMake(0, 0, 160, 320)];
innerView1.backgroundColor = [UIColor clearColor];
innerView1.layer.borderWidth = 20;
innerView1.layer.borderColor = [UIColor whiteColor].CGColor;
innerView1.layer.cornerRadius = 20;
[outerView addSubview:innerView1];

WorkAroundView *innerView2 = [[WorkAroundView alloc] initWithFrame:CGRectMake(160, 0, 160, 320)];
innerView2.backgroundColor = [UIColor clearColor];
innerView2.layer.borderWidth = 20;
innerView2.layer.borderColor = [UIColor whiteColor].CGColor;
innerView2.layer.cornerRadius = 20;
[outerView addSubview:innerView2];