使用自动布局获取自定义 UITableViewCell 中 UIButton 的大小
Get the size of UIButton inside a custom UITableViewCell with Autolayout
我在 Interface Builder 中创建的自定义 UITableViewCell 中有一个 UIButton,高度和宽度由自动布局约束定义。
我需要在自动布局定义最终大小后获取 UIButton 的大小。
我尝试过的:
在我的自定义 UITableViewCell 中
- (void)layoutSubviews
{
[super layoutSubviews];
NSLog(@"%f", self.infoButton.bounds.size.width);
self.infoButton.layer.cornerRadius = self.infoButton.bounds.size.width/2;
self.infoButton.clipsToBounds = YES;
self.infoButton.layer.borderColor = [UIColor whiteColor].CGColor;
self.infoButton.layer.borderWidth = 4.0f;
}
问题是我有不同的值:
2015-06-30 03:01:47.578 MYPROJ[3596:34092] 48.000000
2015-06-30 03:01:47.581 MYPROJ[3596:34092] 48.000000
2015-06-30 03:01:47.583 MYPROJ[3596:34092] 48.000000
2015-06-30 03:01:47.585 MYPROJ[3596:34092] 56.000000
2015-06-30 03:01:47.586 MYPROJ[3596:34092] 56.000000
2015-06-30 03:01:47.586 MYPROJ[3596:34092] 56.000000
2015-06-30 03:01:53.482 MYPROJ[3596:34092] 48.000000
2015-06-30 03:01:53.484 MYPROJ[3596:34092] 56.000000
2015-06-30 03:01:54.939 MYPROJ[3596:34092] 56.000000
2015-06-30 03:02:04.161 MYPROJ[3596:34092] 56.000000
2015-06-30 03:02:05.115 MYPROJ[3596:34092] 56.000000
2015-06-30 03:02:05.957 MYPROJ[3596:34092] 56.000000
我也试过里面的代码- (void)awakeFromNib
我都试过self.infoButton.bounds.size.width
和self.infoButton.frame.size.width
它给了我自动布局之前的静态宽度,在我的例子中是 48.0
还有
恐怕将代码放在- (void)layoutSubviews
中的解决方案会影响性能,因为它会调用用户滚动的所有内容并应用图层转换,有没有更好的解决方案?
在您的自定义 UITableViewCell.m 文件中,在 awakeFromNib 方法中添加以下行。
在这里,因为您的按钮依赖于单元格,并且确实与设备屏幕具有相同的宽度。
- (void)awakeFromNib {
// Initialization code
self.infoButton.layer.cornerRadius = [UIScreen mainScreen].bounds.size.width * 0.075f; // 0.15/2 = 0.075f (Half of the button's width)
self.infoButton.clipsToBounds = YES;
self.infoButton.layer.borderColor = [UIColor whiteColor].CGColor;
self.infoButton.layer.borderWidth = 4.0f;
}
希望对您有所帮助...
尝试访问按钮的固有内容大小。
CGSize buttonSize = self.infoButton.intrinsicContentSize;
我在 Interface Builder 中创建的自定义 UITableViewCell 中有一个 UIButton,高度和宽度由自动布局约束定义。
我需要在自动布局定义最终大小后获取 UIButton 的大小。
我尝试过的:
在我的自定义 UITableViewCell 中
- (void)layoutSubviews
{
[super layoutSubviews];
NSLog(@"%f", self.infoButton.bounds.size.width);
self.infoButton.layer.cornerRadius = self.infoButton.bounds.size.width/2;
self.infoButton.clipsToBounds = YES;
self.infoButton.layer.borderColor = [UIColor whiteColor].CGColor;
self.infoButton.layer.borderWidth = 4.0f;
}
问题是我有不同的值:
2015-06-30 03:01:47.578 MYPROJ[3596:34092] 48.000000
2015-06-30 03:01:47.581 MYPROJ[3596:34092] 48.000000
2015-06-30 03:01:47.583 MYPROJ[3596:34092] 48.000000
2015-06-30 03:01:47.585 MYPROJ[3596:34092] 56.000000
2015-06-30 03:01:47.586 MYPROJ[3596:34092] 56.000000
2015-06-30 03:01:47.586 MYPROJ[3596:34092] 56.000000
2015-06-30 03:01:53.482 MYPROJ[3596:34092] 48.000000
2015-06-30 03:01:53.484 MYPROJ[3596:34092] 56.000000
2015-06-30 03:01:54.939 MYPROJ[3596:34092] 56.000000
2015-06-30 03:02:04.161 MYPROJ[3596:34092] 56.000000
2015-06-30 03:02:05.115 MYPROJ[3596:34092] 56.000000
2015-06-30 03:02:05.957 MYPROJ[3596:34092] 56.000000
我也试过里面的代码- (void)awakeFromNib
我都试过self.infoButton.bounds.size.width
和self.infoButton.frame.size.width
它给了我自动布局之前的静态宽度,在我的例子中是 48.0 还有
恐怕将代码放在- (void)layoutSubviews
中的解决方案会影响性能,因为它会调用用户滚动的所有内容并应用图层转换,有没有更好的解决方案?
在您的自定义 UITableViewCell.m 文件中,在 awakeFromNib 方法中添加以下行。
在这里,因为您的按钮依赖于单元格,并且确实与设备屏幕具有相同的宽度。
- (void)awakeFromNib {
// Initialization code
self.infoButton.layer.cornerRadius = [UIScreen mainScreen].bounds.size.width * 0.075f; // 0.15/2 = 0.075f (Half of the button's width)
self.infoButton.clipsToBounds = YES;
self.infoButton.layer.borderColor = [UIColor whiteColor].CGColor;
self.infoButton.layer.borderWidth = 4.0f;
}
希望对您有所帮助...
尝试访问按钮的固有内容大小。
CGSize buttonSize = self.infoButton.intrinsicContentSize;