UIButton 框架在 viewDidLoad 中未按预期布局

UIButton frame doesn't layout as expected in viewDidLoad

这是我的布局,我向 UIView 添加了一个 UIButton,并设置了它的背景。

我想把它设置成一个圆,所以 cornerRadius 必须是 height/2 .

- (void)viewDidLoad
{
    [self initView];
    [super viewDidLoad];

}
- (void)initView {
    NSLog(@"%@", NSStringFromCGRect(self.userHeadImageButton.frame));
        //头像圆角
        CGFloat width = self.userHeadImageButton.frame.size.width;
        self.userHeadImageButton.layer.masksToBounds = YES;
        self.userHeadImageButton.layer.cornerRadius = width/2;
    //    self.userHeadImageButton.layer.cornerRadius = 64;
}

UIButton 的框架应该是{{136, 84}, {128, 128}}。它应该变成一个圆圈。

但日志是 [13821:81357] {{-23, -15}, {46, 30}} 并且效果是做一个 cornerRadius,而不是一个圆。

我不知道发生了什么。谁能帮帮我,谢谢

问题是,当调用 viewDidLoad 时,不会评估自动布局约束以确定屏幕上视图的确切位置和大小,因此这就是为什么您的按钮会有一些古怪的 position/size 值。

如果您使用以下代码在视图控制器中实现 viewDidLayoutSubviews,希望您会看到一个圆形图像。

- (void)viewDidLayoutSubviews {
  CGFloat width = self.userHeadImageButton.frame.size.width;
  self.userHeadImageButton.layer.cornerRadius = width / 2;
}

如果你只想用 StoryBoard 做,还有另一种方法,也不需要管理视图生命周期

只需添加两个用户定义的运行时属性

layer.cornerRadius 输入数字并放置按钮高度的一半! layer.masksToBounds 作为布尔值是

请确保仅当您的按钮高度固定时才执行此操作