据我了解,似乎有三种方法来布置自定义表格视图单元格:
layoutSubviews
。initWithStyle:reuseIdentifier:
。第二种和第三种方法有什么区别?另外,为什么不drawRect
?
P.S。我正在阅读本书Pro iOS Table Views by Tim Duckett的第9章,我们正在构建自定义UITableViewCell
。作者展示了如何以与上面相同的顺序布置单元格,但我不知道最后两个之间的差异,因为它们都消除了IB。但我注意到,作者只是在layoutSubviews
中设置帧,而不是在initWithStyle:reuseIdentifier:
中设置有关视图外观的属性(例如,背景图像,背景颜色等)。
答案 0 :(得分:4)
您应该在
中创建单元格子视图- initWithStyle: (UITableViewCellStyle) style reuseIdentifier: (NSString*) resueIdentifier
并在layoutSubviews中布局它们。
-initWithStyle:reuseIdentifier
方法将在初始化时调用一次,但此时您的单元格框架可能不正确。
这就是为什么你需要在layoutSubviews
方法中布局它,当单元格需要更新布局时调用它,例如,当自动旋转发生时。因此,如果您将在此方法中布置子视图,您将拥有有效的单元格框架和正确的子视图布局。
答案 1 :(得分:2)
-[UIView layoutSubviews]
为您提供了对视图重新布局方式的更多控制(我想在您的书籍示例中,它是在表格单元格内容中完成的)。 当您使用NIB文件时,您所做的只是在内存中重新创建具有一些属性设置的视图层次结构,但是nib没有重新布局单元格的动态功能(或者它仅限于spring / struct或自动布局功能)。如果不使用NIB,则必须以编程方式创建此层次结构。
特别是在表格视图单元子类中,您可以添加许多属性,这些属性可能会改变单元格重新布局的方式,例如显示或不显示缩略图图像,是否显示某个标签,在这种情况下,您可能需要layoutSubviews方法来更新单元格布局,同时考虑到由于不同属性值而导致的所有可能布局。