有时UILayoutGuides
数组中的两个subviews
位于数组的末尾,有时则不是。如果我试图让视图出现在最顶层的视图后面,那么这种不一致就很成问题了!
这可能是一个Xcode错误,因为有一天,一切都很好,第二天有两个额外的子视图,我调整,第二天混合结果。那么 - 它取决于某种设置还是这个bug?如果不必过滤subview
数组或检查Class
的{{1}}或检查subview
是否只是为了执行此操作,那将不错。
来自我的控制台:
conformsToProtocol:UILayoutSupport
但就像我说的那样,有时这些不在数组的末尾。
我开始认为这不是Xcode错误,因为我刚刚重新启动它并得到相同的结果。
现在,我已经实现了这个方法,以便我可以在其上调用lastObject并获得正确的非UILayoutGuide子视图。请确保不要在此使用快速枚举,因为这不能保证接收器阵列中对象的顺序。
(lldb) po [onView subviews]
<__NSArrayM 0x1708426d0>(
<UIView: 0x1701750c0; frame = (0 69; 768 887); autoresize = RM+BM; layer = <CALayer: 0x17022e2c0>>,
<UIView: 0x170175180; frame = (0 0; 768 69); autoresize = RM+BM; layer = <CALayer: 0x17022e3e0>>,
<UIView: 0x178173740; frame = (0 956; 768 68); autoresize = TM+BM; layer = <CALayer: 0x1782375a0>>,
<_UILayoutGuide: 0x170198e20; frame = (0 0; 0 0); hidden = YES; layer = <CALayer: 0x17022e660>>,
<_UILayoutGuide: 0x170199570; frame = (0 1024; 0 0); hidden = YES; layer = <CALayer: 0x17022e680>>
)
答案 0 :(得分:2)
布局指南不是视图,不应该被视为这样!它是一个实现细节,您不应该依赖它来构建视图布局逻辑。遍历subviews
数组也不被视为良好做法,因为系统可能会在那里添加可能不是您期望的子视图(惊讶,它已经做到了!)。
您应该跟踪哪个视图是最顶层的,并使用insertSubview:belowSubview:
将子视图添加到层次结构中的正确位置。