在我覆盖的 UITableViewCell 子类中,layoutSubviews
因为我需要计算几个子视图的帧。我所有计算的基础是内容视图的宽度。这就是我开始实施的layoutSubviews
样子:
- (void) layoutSubviews
{
[super layoutSubviews]; // invoke this to set up the content view's bounds
CGFloat contentViewWidth = self.contentView.bounds.size.width;
[...] // calculate and assign frames to subviews
}
我已经开始在 iPhone 模拟器的分组表视图中对此进行测试。单元格应该只包含内容视图中的内容,即我已经关闭了所有周围的花哨的东西。具体来说,我通过将附件类型设置为 来禁用附件视图UITableViewCellAccessoryNone
。由于这个原因,附件视图被隐藏了,尽管它的边界/框架属性仍然报告了 20/20 的大小。
基于所有这些,以及下面的简单说明,我希望上述代码片段中的内容视图宽度报告为 300。
<----------- screen width = 320 ----------->
+------------------------------------------+
| |
| <--- content view width = 300 ---> |
| +--------------------------------+ |
|<-->| table view cell |<-->|
| 10 +--------------------------------+ 10 |
| |
| [...] |
但事实并非如此,实际报出的内容视图宽度是270!
一些研究表明,这 30 个缺失点包括 a)附件视图的 20 个宽度,以及 b)内容视图和附件视图之间的 10 个间距。我尝试将附件视图大小设置为 0/0,效果是内容视图宽度现在报告为 290。稍微好一点,但仍然相差 10 分。我也尝试将accessoryView
属性设置为nil
,但视图只是由[super layoutSubviews]
.
最后,问题是:有没有办法真正禁用附件视图,使其不包含在内容视图宽度的计算中?或者,跳过调用[super layoutSubviews]
并简单地自己计算宽度是否安全?