UIButton框架在viewDidLoad中没有按预期布局

时间:2015-03-19 02:46:09

标签: ios autolayout cornerradius

UIViewController Layout

这是我的布局,我将UIButton添加到UIVut,并设置其背景。

我正在尝试将其设置为圆形,因此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,而不是一个圆圈。

我不知道发生了什么事。任何人都可以帮助我,谢谢

2 个答案:

答案 0 :(得分:1)

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

如果您在视图控制器中使用以下内容实现viewDidLayoutSubviews,希望您能看到圆形图像。

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

答案 1 :(得分:0)

如果您只想使用StoryBoard而不是其他方式,也不需要管理视图lifeCycle

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

Chech this

带有类型编号的layer.cornerRadius并放置按钮高度的一半! layer.masksToBounds为boolean YES

请确保只有按钮高度固定时才能执行