UIView子视图的顺序?

4

如果我使用for循环;

for(UIView *subview in [myView subviews])

子视图的顺序是如何确定的?

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


5
没问题,您只需要启动官方文档,就可以轻松找到答案。 - user529758
但是你也可以检查UIClass,例如if([subView isKindOfClass:[UILabel class]])//检查SubView类是否为UILabel类? { //在此处编写您的UILabel代码; } - iPatel
5
我不认为这与问题有关。 - user529758
@H2CO3 - 是的,但我只是想告诉OP你也可以这样获取它,所以我也把它作为评论放了上去 :) 谢谢 :) - iPatel
1
子视图在数组中的顺序反映了它们在屏幕上的可见顺序,索引为0的视图是最后面的视图。这是subviews方法的描述。 - Suryakant Sharma
2个回答

8

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

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

讨论

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

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


1
我的英语可能不是很好,但是“visible order”是什么意思?它如何计算?什么是“back-most”?从哪一侧开始算?这是否意味着子视图添加到其父视图的顺序? - Andrey Chernukha
2
旧问题和评论,但是@AndreyChernukha,back的意思是从观察者最远的视图,在3D层次结构中处于堆栈底部。当您添加视图时,它们会添加到堆栈顶部,因此顺序几乎与添加顺序相同,除非进行显式重新排序。 - Chris Conover
2
@ChrisConover 谢谢你,伙计。那很有道理。 - Andrey Chernukha

1
我认为它很有用,在我的经验中,它会按添加顺序放置subviews。但使用UIScrollView时要小心。我偶尔会遇到为滚动条创建的“幻影”subviews

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接