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 作为布尔值是
请确保仅当您的按钮高度固定时才执行此操作
这是我的布局,我向 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 作为布尔值是
请确保仅当您的按钮高度固定时才执行此操作