【问题标题】:Get the size of UIButton inside a custom UITableViewCell with Autolayout使用 Autolayout 获取自定义 UITableViewCell 中 UIButton 的大小
【发布时间】:2015-06-30 10:18:51
【问题描述】:

我在 Interface Builder 中创建的自定义 UITableViewCell 中有一个 UIButton,高度和宽度由 Autolayout 约束定义。

我需要在自动布局定义最终尺寸后获取 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.widthself.infoButton.frame.size.width

它给了我自动布局之前的静态宽度,在我的例子中是 48.0 还有

恐怕将代码放在- (void)layoutSubviews 中的解决方案会影响性能,因为它会被称为用户每次滚动并应用图层转换的所有内容,有没有更好的解决方案?

【问题讨论】:

  • 现在更新了答案。!!
  • 我试过self.infoButton.frame.size.width bt 它总是给我自动布局之前的大小
  • 你能提供你用于单元格按钮的水平约束吗?这会有所帮助..
  • @TejvanshSinghChhabra 我已经用图像更新了问题,实际上 UIButton 的宽度是单元格宽度的 15%,它还具有纵横比约束,如您从屏幕截图中看到的那样跨度>
  • 单元格是否在水平方向上完全填满了屏幕尺寸?在这种情况下,很容易实现。

标签: ios objective-c uitableview autolayout calayer


【解决方案1】:

在您的自定义 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;
}

希望对你有帮助...

【讨论】:

  • 它可以,谢谢,但我想我不必更改 UIButton 的约束。你能解释一下为什么* 0.075f;
  • 我在其中添加了评论以帮助您理解。如果答案对您有帮助,请标记为正确并点赞,以便其他人知道。..
  • 谢谢,我忘了我需要一半的宽度;)
【解决方案2】:

尝试访问按钮的内在内容大小。

CGSize buttonSize = self.infoButton.intrinsicContentSize;

【讨论】:

  • 我已经尝试过了,但它不起作用,它在awakeFromNiblayoutSubviews中都显示错误的值
猜你喜欢
  • 2019-12-18
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多