【发布时间】:2015-07-31 17:27:02
【问题描述】:
我有一个 UITableView,其中单元格包含放置在 XIB 中的网格样式的子视图。今天,它们被安排了自动布局和约束。这些子视图可能有十几种类型,其中一些类型具有固定宽度,其他类型必须填充空白空间,都具有固定高度。每个单元格根据其需要显示一组特定的这些类型。
下图显示了 3 个单元格及其子视图
关键是架构需要很多规则来更新约束,并且在添加新的子视图类型时不容易维护。在这种情况下,每个单元仅使用一个 XIB 似乎不是最佳选择,因为初始界面构建器布局只是多种可能安排中的一种,并且单元必须做很多工作才能适应。此外,我更喜欢在添加新子视图类型时不需要触摸以前的子视图类型的解决方案。
我考虑过以下解决方案:
-
在 UITableViewcell 中插入一个 collectionView,并将子视图转换为 UICollectionViewCells :
- 您认为屏幕上有这么多collectionViews 可能是性能问题吗? (屏幕上最多可以同时显示 10 个细胞,每个细胞有 1 到 10 个细胞)
- 考虑到 UICollectionViewCells 甚至不会在 UITableViewCell 内滚动,在这种情况下使用 collectionView 是不是有点过载,只是为了安排一组视图?
-
使用新的 UIStackView
- stackView 仅与 iOS 9 兼容,因此这意味着我们必须在一段时间内维护 2 个版本的代码
- stackView 将每个子视图像素完美放置似乎有点复杂
-
为每个子视图类型创建一个单独的 XIB,并让相应的 UIView 根据其邻居计算自己的约束,从而形成自定义网格系统
- 这有点过于“自定义”解决方案,因此其他开发人员更难维护和理解
- 如果在未来它将是第四列子视图,它仍然需要进行大量更改(= 它不是一个可以很好地适应的真正的网格系统)
您会使用哪种解决方案?您还有其他建议吗? 谢谢
【问题讨论】:
标签: ios objective-c performance architecture memory-efficient