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

her*_*ube 6 uitableview ios

在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
}
Run Code Online (Sandbox Code Playgroud)

我已经开始在iPhone模拟器的分组表视图中测试它了.单元格应该只包含内容视图中的内容,即我已经关闭了所有周围的花哨的东西.具体来说,我通过将附件类型设置为禁用了附件视图UITableViewCellAccessoryNone.因此,附件视图被隐藏,但其边界/框架属性仍然报告大小为20/20.

基于所有这些,以及下面的简单说明,我希望上面代码片段中的内容视图宽度报告为300.

<----------- screen width = 320 ----------->
+------------------------------------------+
|                                          |
|    <--- content view width = 300 --->    |
|    +--------------------------------+    |
|<-->|         table view cell        |<-->|
| 10 +--------------------------------+ 10 |
|                                          |
|                  [...]                   |
Run Code Online (Sandbox Code Playgroud)

但事实并非如此,实际报告的内容视图宽度为270!

一些研究表明,30个缺失点包括a)配件视图的20宽度,以及b)内容视图和附件视图之间的10个间距.我尝试将附件视图大小设置为0/0,效果是内容视图宽度现在报告为290.稍微好一些,但仍然是10分.我也尝试将accessoryView属性设置为nil,但视图只是重新创建[super layoutSubviews].

最后,问题是:有没有办法真正禁用附件视图,以便它不包含在内容视图宽度的计算中?或者,是否可以安全地跳过调用[super layoutSubviews]并自行计算宽度?

her*_*ube 8

在重新审视这个问题后,我发现我无法再重现问题中描述的行为.现在的行为符合预期:

  • 表格视图单元格的默认附件样式是 UITableViewCellAccessoryNone
  • accessoryView物业返回nil
  • 内容视图宽度报告为302

我现在正在iPhone 5.1模拟器上的Xcode 4.2中测试它.当我问这个问题时,我相信我仍然在运行iPhone 4.3模拟器.我现在必须假设问题要么仅存在于4.3模拟器中,要么是由于我的部分Xcode配置错误,或者首先是完全想象的.

对于记录:我的解决方法是在内容视图中应用新宽度layoutSubviews:

- (void) layoutSubviews
{
  [super layoutSubviews];

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

  [...]
}
Run Code Online (Sandbox Code Playgroud)