Autolayout 下面的 Layer.cornerRadius

一、问题:

  如何在Autolayout模式中设置一个UIView的layer.cornerRadius?

二、解决:

  UiView的layer目前还不支持Autolayout设置约束,因此如果想设置一个layer.cornerRadius的大小,必须传递的是一个值。

  如果被设置的UIView尺寸会发生变化,也就是动态的大小,那么就需要在约束发生变化的时候,主动更新layer.cornerRadius对应的大小

  那么具体分两种情况来对待:

  第一种,UIView的尺寸不变化的时候:

  1)在Xcode中设置layer.cornerRadius

  

  2)使用代码

  注意代码的位置,需要在View初始化的时候,比如ViewDidload,initView的时候

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *imgView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor yellowColor];
    self.imgView.backgroundColor = [UIColor blueColor];

    self.imgView.layer.cornerRadius = self.view.bounds.size.height/2;
    self.imgView.layer.masksToBounds = YES;


}
@end

  但是需要注意一种情况,如果这个View的尺寸未计算得到的时候,需要放在 viewDidLayoutSubviews (VC),和viewDidLayout中(View)

  第二种,UIView的尺寸变化的时候:

  这种时候因为UIView的尺寸发生变化,那么需要在尺寸信息生成之后,进行调整。

  如果是VC,那么在viewDidLayoutSubviews或者ViewDidAppear的回调中。

  如果是UIView,苹果建议将约束代码放在updateConstraints回调中,这样可以提升性能。

//重写updateViewConstraints方法,进行约束的更新
- (void)updateViewConstraints {
    [self.growingButton mas_updateConstraints:^(MASConstraintMaker *make) {
        make.center.mas_equalTo(self.view);
        
        // 初始宽、高为100,优先级最低
        make.width.height.mas_equalTo(100 * self.scacle).priorityLow();
        // 最大放大到整个view
        make.width.height.lessThanOrEqualTo(self.view);
    }];
    [super updateViewConstraints];
}


// 通知需要更新约束,但是不立即执行
[self setNeedsUpdateConstraints];
// 立即更新约束,以执行动态变换
// update constraints now so we can animate the change
[self updateConstraintsIfNeeded];
// 执行动画效果, 设置动画时间
[UIView animateWithDuration:0.2 animations:^{
   [self layoutIfNeeded];
}];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值