1

据我了解,似乎有三种布局自定义表格视图单元格的方法:

  1. 在界面生成器中。
  2. layoutSubviews.
  3. initWithStyle:reuseIdentifier:.

第二种和第三种方法有什么区别?另外,为什么不drawRect呢?

PS 我正在关注 Tim Duckett 所著的 Pro iOS Table Views一书的第 9 章,我们正在其中构建 custom UITableViewCells。作者展示了如何以与上面相同的顺序布置单元格,但我不知道最后两个之间有什么区别,因为它们都取消了 IB。不过,我注意到,作者只是简单地设置了框架,这layoutSubviewsinitWithStyle:reuseIdentifier:设置视图外观的属性(例如,背景图像、背景颜色等)不同。

4

2 回答 2

4

您应该在

- initWithStyle: (UITableViewCellStyle) style reuseIdentifier: (NSString*) resueIdentifier

并将它们布局在 layoutSubviews 中。 -initWithStyle:reuseIdentifier方法将在初始化时调用一次,但此时您的单元格可能有不正确的帧。

这就是为什么您需要在layoutSubviews方法中对其进行布局,当单元格需要更新布局时调用它,例如,当发生自动旋转时。因此,如果您将在此方法中布局子视图,您将拥有有效的单元格框架和正确的子视图布局。

于 2013-07-31T08:12:17.217 回答
2
-[UIView layoutSubviews]

让您对视图的重新布局方式有更多的控制(我想在您的书示例中它是在表格单元格 contentView 中完成的)。当您使用 NIB 文件时,您所做的只是在内存中重新创建具有某些属性集的视图层次结构,但 nib 没有重新布局单元格的动态功能(或者它仅限于 spring/struct 或自动布局功能)。如果您不使用 NIB,则必须以编程方式创建此层次结构。

特别是在表格视图单元格子类中,您可以向其中添加许多属性,这些属性可以改变单元格的重新布局方式,例如是否显示缩略图,是否显示某个标签,在这种情况下,您可能需要 layoutSubviews更新单元格布局的方法考虑到由于不同的属性值而导致的所有可能的布局。

于 2013-07-31T08:18:58.253 回答