UIView的圆角用autolayout裁剪视图

Utt*_*dam 9 rounded-corners ios autolayout

我正在使用autolayout enable创建IOS应用程序.在我的视图应用中,有圆角(仅限顶角).我使用以下功能:

- (void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners
{
    UIBezierPath *rounded = [UIBezierPath bezierPathWithRoundedRect:view.bounds
                                                  byRoundingCorners:corners
                                                        cornerRadii:CGSizeMake(5.0, 5.0)];
    CAShapeLayer *shape = [[CAShapeLayer alloc] init];
    [shape setPath:rounded.CGPath];
    view.layer.mask = shape;
}
Run Code Online (Sandbox Code Playgroud)

并在viewDidAppear中调用此函数,如:

-(void)viewDidAppear:(BOOL)animated {

    [self setMaskTo:contentView byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight]; 
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但问题是当应用程序处于横向模式时,当我从一个视图导航到另一个视图时,它会像纵向视图一样裁剪视图.请告诉我这种方法有什么问题吗?

小智 14

Autolayout不会重新计算您的蒙版,因此每次布局更改时都必须设置蒙版.移动setMaskTo:byRoundingCorners: from viewDidAppear: to viewDidLayoutSubviews:

- (void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    [self setMaskTo:contentView byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight];
}
Run Code Online (Sandbox Code Playgroud)