UIView 子视图的顺序?

Posted

技术标签:

【中文标题】UIView 子视图的顺序?【英文标题】:UIView subviews' order? 【发布时间】:2013-09-05 12:22:45 【问题描述】:

如果我使用 for 循环;

for(UIView *subview in [myView subviews])

子视图按什么顺序被带入?

根据他们添加的顺序还是别的什么?

【问题讨论】:

别的。您只需启动official documentation 即可轻松找到它。 但是你也可以检查 UIClass 比如 if([subView isKindOfClass:[UILabel class]]) // 检查是 SubView Class 是 UILabel 类吗? // 你可以在这里为你的 UILabel 编写代码; @iPatel 我看不出这与问题有什么关系。 @H2CO3 - 是的,但我只是想告诉 OP 你也可以像这样得到它,所以.. 我也把它作为评论 :) 谢谢 :) 数组中子视图的顺序反映了它们在屏幕上的可见顺序,索引为 0 的视图是最后面的视图。这就是子视图方法描述的内容。 【参考方案1】:

正如文档所说,它反映了它们在屏幕上的可见顺序。

@property(nonatomic, readonly, copy) NSArray *subviews

讨论

您可以使用此属性来检索与 您的自定义视图层次结构。数组中子视图的顺序 反映它们在屏幕上的可见顺序,视图位于索引 0 是最后面的视图。

对于在 UIKit 和其他系统框架中声明的复杂视图,任何 视图的子视图通常被认为是私有的并且受制于 随时改变。因此,您不应尝试检索或 修改这些类型的系统提供的视图的子视图。如果你这样做, 您的代码可能会在未来的系统更新期间中断。

【讨论】:

我的英语可能不太好,但什么是“可见的秩序”?它是如何计算的?什么是最后面?最靠后从哪一侧?这是否意味着子视图添加到其父视图的顺序? 旧问题和评论,但@AndreyChernukha,后面的意思是离查看者最远的视图,3D 层次结构中堆栈的底部。当您添加视图时,它们会被添加到堆栈的顶部,因此顺序几乎与添加的顺序相同,除了显式重新排序。 @ChrisConover 非常感谢,伙计。这是有道理的【参考方案2】:

我发现它很有用,根据我的经验,它会放置 subviews 以便添加它们。使用UIScrollView 时请小心使用它们。我偶尔会遇到为滚动条创建的“幻影”subviews

【讨论】:

以上是关于UIView 子视图的顺序?的主要内容,如果未能解决你的问题,请参考以下文章

UIView 常见属性

UIView 子视图自动布局问题

基于子视图灵活调整UIView大小的可靠解决方案

在保持子视图锚定的同时调整 UIView 宽度

iOS 分类:按顺序添加视图

子视图与子视图控制器 z 位置