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回调中,这样可以提升性能。

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//重写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];
}];

  

  

 

posted @   兜兜有糖的博客  阅读(1256)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示