在UITableViewCell内创建视图网格的最佳方法

时间:2015-07-31 17:27:03

标签: ios objective-c performance architecture memory-efficient

我有一个UITableView,其中的单元格包含放置在XIB中的网格样式的子视图。今天,他们安排了自动布局和约束。这些子视图可能是十几种类型,其中一些类型具有固定宽度,另一些必须填充空白空间,所有类型都具有固定高度。每个单元格根据其需要显示这些类型的特定集合。

下图显示3个细胞及其子视图

enter image description here

关键是架构需要大量规则来更新约束,并且在添加新的子视图类型时不易维护。在这种情况下,每个单元仅使用一个XIB似乎不是最佳选择,因为初始界面构建器布局只是多种可能排列中的一种,并且单元必须做很多工作才能适应。此外,我更喜欢一种解决方案,当添加新的子视图时,不需要触摸先前的子视图类型。

我考虑过以下解决方案:

  • 在UITableViewcell中插入一个collectionView,并将子视图转换为UICollectionViewCells:

    • 你认为在屏幕上有如此多的collectionViews可能是一个性能问题吗? (我们可能在屏幕上同时拥有多达10个细胞,每个细胞有1到10个细胞)
    • 考虑到UICollectionViewCells甚至不会在UITableViewCell里面滚动,在这种情况下使用collectionView只是为了安排一组视图吗?
  • 使用新的UIStackView

    • stackView仅与iOS 9兼容,因此这意味着我们必须暂时维护两个版本的代码
    • stackView似乎有点复杂,以使每个子视图像素完美无缺
  • 为每个子视图类型创建一个单独的XIB,并使相应的UIView根据其邻居计算自己的约束,从而构成一个自定义网格系统

    • 这有点太“自定义”解决方案,因此对其他开发人员来说更难以维护和理解
    • 如果在未来中它仍然需要进行大量更改,那么它将成为第四列子视图(=它不是一个可以很好地适应的真实网格系统)

您会使用哪种解决方案?你有其他建议吗? 感谢

1 个答案:

答案 0 :(得分:1)

I always work with custom collections, for example on this video https://www.youtube.com/watch?v=LFBTbmvFR30

Сustom grid with dynamic size of cells and all collection is resizable with cells You should use collection view with custom layout and custom cells

For example i use this layout for beautiful dynamic greed https://github.com/bryceredd/RFQuiltLayout

enter image description here

And return to you screen, if you can use this layout u can do you collection greed like on a screen without "collection view into collection view cell" - this method is really true, but you should understand how to work with custom layout.

or

U can use "collection view into collection view cell" this is bad method but faster and you can use custom layout.

P.S Trust me, all beautifull collection view have custom layout you can find many examples on gitHub.