更改 UIView backgrundColor 重置圆角

Posted

技术标签:

【中文标题】更改 UIView backgrundColor 重置圆角【英文标题】:Change UIView backgrundColor reset round corners 【发布时间】:2017-08-09 13:09:24 【问题描述】:

我需要更改自定义类按钮的背景颜色,由 UIViewUIButton 组成。

    - (instancetype)initWithFrame:(CGRect)frame color:(UIColor*)color imageName:(NSString*)imageName target:(id)target action:(SEL)action tag:(int)tag

    self = [super init];

    if (self) 

        self.frame = frame;

        CircleStatusView * view = [[CircleStatusView alloc]initWithFrame:self.bounds color:color];
        view.tag = 22;
        [self addSubview:view];

        UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.frame = self.bounds;
        [btn setBackgroundColor:[UIColor clearColor]];
        [btn setImage:[[UIImage imageNamed:imageName]imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
        [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
        [btn setTintColor:[UIColor whiteColor]];
        btn.tag = tag;
        [self addSubview:btn];


    
    return self;


当使用此方法按下UIButton 时,我会更改UIView 的背景颜色。我从灰色变为绿色:

 - (void)changeBackgroundColor:(UIColor*)color

        [(CircleStatusView*)[self viewWithTag:22] setBackgroundColor:color];

    

CircleStatusView 是这样制作的:

- (instancetype)initWithFrame:(CGRect)frame color:(UIColor*)color

    self = [super init];

    if (self) 

        self.frame = frame;
        self.layer.borderColor = [UIColor whiteColor].CGColor;
        self.layer.borderWidth = 3;
        self.backgroundColor = color;
        self.clipsToBounds = YES;
        self.layer.masksToBounds = NO;
        self.layer.cornerRadius = frame.size.width/2;

        self.layer.shadowColor = [UIColor darkGrayColor].CGColor;
        self.layer.shadowOffset = CGSizeMake(0, 2);
        self.layer.shadowOpacity = 1;
        self.layer.shadowRadius = 1.0;

    
    return self;


我的问题是视图的角半径消失了,视图变成了正方形而不是保持圆形,如下所示:

【问题讨论】:

【参考方案1】:

我调用的是 setBackgroundColor: 而不是 changeBackgroundColor:,愚蠢的错误

【讨论】:

以上是关于更改 UIView backgrundColor 重置圆角的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UIView 大小?

在另一个自定义 UIView 中设置/更改嵌套自定义 UIView 的变量

更改 UIView 框架大小不会更改 UITableview 框架原点 y

iOS 验证 uiview 已更改颜色

更改 UITableViewCell 内的 UIView 高度

通过 Interface Builder 更改 UIView 属性