Ios 自定义UITableViewCell中的contentView宽度错误?

Ios 自定义UITableViewCell中的contentView宽度错误?,ios,uitableview,Ios,Uitableview,在UITableViewCell子类中,我覆盖了layoutSubviews,因为我需要计算两个子视图的帧。我所有计算的基础是内容视图的宽度。这就是我的layoutSubviews实现的开始: - (void) layoutSubviews { [super layoutSubviews]; // invoke this to set up the content view's bounds CGFloat contentViewWidth = self.contentView.bo

在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 |
|                                          |
|                  [...]                   |

+------------------------------------------+
|                                          |
|        |
|    +--------------------------------+    |
||表视图单元||
| 10 +--------------------------------+ 10 |
|                                          |
|                  [...]                   |
但事实并非如此,实际报告的内容视图宽度为270

一点研究表明,30个缺失点由A)20个辅助视图宽度和b)10个内容视图和辅助视图之间的间距组成。我尝试将附件视图大小设置为0/0,结果是内容视图宽度现在报告为290。稍微好一点,但仍差10分。我还尝试将
accessoryView
属性设置为
nil
,但视图只是由
[super layoutSubviews]
重新创建的


最后,问题是:是否有办法真的禁用附件视图,使其不包括在内容视图宽度的计算中?或者,跳过调用
[super layoutSubviews]
并自己计算宽度是否安全?

再次查看此问题后,我发现我无法重现问题中描述的行为。现在的行为与预期一样:

  • 表格视图单元格的默认附件样式为
    uitableviewcellaccessoryne
  • accessoryView
    属性返回
    nil
  • 内容视图宽度报告为302
我现在正在iPhone 5.1模拟器上的Xcode 4.2中测试这一点。当我问这个问题时,我相信我的iPhone4.3模拟器还在运行。我现在必须假设这个问题要么只存在于4.3模拟器中,要么是由于我对Xcode的一些错误配置,要么是完全虚构的

作为记录:我的解决方法是在
layoutSubviews
中为内容视图应用一个新的宽度:

- (void) layoutSubviews
{
  [super layoutSubviews];

  CGRect contentViewFrame = self.contentView.frame;
  contentViewFrame.size.width = 302;
  self.contentView.frame = contentViewFrame;

  [...]
}

这不是一个解决方案,但如果您忽略在此处调用super,则会丢失分组表视图中的弯曲单元格角点,因此在单元格最终显示在表中之前,
layoutSubviews
可能不会被调用几次。您是否验证了最后一次调用的
contentView
的大小,还是只查看初始调用?@rmaddy:在我的测试用例中,UIKit只调用
layoutSubviews
一次。