制作主视图的视图子视图而不是它视觉上的视图是一种好习惯吗?

Posted

技术标签:

【中文标题】制作主视图的视图子视图而不是它视觉上的视图是一种好习惯吗?【英文标题】:Is it good practice to make a view subview of the main view, not a view it visually lies upon? 【发布时间】:2015-06-23 09:18:41 【问题描述】:

假设在我的视图控制器中,我有一个自定义的UIView,它在视图控制器的视图中保留了某些区域。让我们将此视图称为viewA。我有一个名为viewB 的自定义UIView,它位于viewA 的范围内。我曾经认为viewB 必须是viewA 的子视图,因为它在其范围内。但是今天我和我的一位同事发生了争执,他说viewB 不一定应该是viewA 的子视图,而是视图控制器视图的子视图。你怎么看?关于这个问题有共同的规则吗?

【问题讨论】:

【参考方案1】:

我认为不存在 viewB 必须是 viewA 的子视图,因为它位于其范围内。

视图层次结构由 UIView 的数组属性 subViews 组织。每个子视图都有自己的框架信息来布局相对于父级的边界。重叠是正常的

【讨论】:

【参考方案2】:

在我看来,这取决于 viewA 和 viewB 的使用情况。如果您总是想在 viewA 的范围内相对定位 viewB,或者如果您总是想将 viewA 和 viewB 一起使用,那么将 viewB 添加为子视图可​​能会更简单。如果您想分别定位和使用这两个视图,或者如果这两个视图的位置本身不相关,我会说它们应该是单独的视图。

简而言之,仅仅因为视图重叠并不意味着它们属于一起/一个应该是另一个的超级视图。

【讨论】:

【参考方案3】:

UITableViewCells 是UITableView 的子视图,不是因为它们在UITableView 的范围内,而是它们有内部连接。

在你的情况下,你需要考虑viewAviewB 是否有一些真正的关系,或者只是碰巧在一起。也许viewA 访问和修改viewB 很多?或者viewBviewA 的一个组件?这时就需要将viewB 设置为viewA 的子视图。

【讨论】:

以上是关于制作主视图的视图子视图而不是它视觉上的视图是一种好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

NSLayoutConstraint:针对stackview中的视图进行布局是不是是一种好习惯?

移动子视图 - 偏移量错误,但视觉上正确?

在一个屏幕上可以有多个 webviews 吗?

识别视图中的滑动手势而不是子视图

为啥子视图控制器占据整个屏幕?

将 UICollectionView 和 UITableView 放在 iOS 的 UIScrollView 中是一种好习惯吗?