首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么子视图数组中的UILayoutGuide顺序不一致?

为什么子视图数组中的UILayoutGuide顺序不一致?
EN

Stack Overflow用户
提问于 2014-04-19 06:30:20
回答 1查看 812关注 0票数 1

有时,UILayoutGuides数组中的两个subviews位于数组的末尾,有时则不是。如果我试图使视图出现在最上面的视图后面,这种不一致是非常有问题的!

这可能是一个Xcode错误,因为一天,一切都很好,第二天有两个额外的子视图,我调整了,第二天的结果喜忧参半。所以-它是取决于某种设置,还是这是一个bug?最好不用过滤subview数组或检查subviewClass,或者检查conformsToProtocol:UILayoutSupport是否只是为了这样做。

从我的控制台:

代码语言:javascript
复制
(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>>
)

但就像我说的,有时这些并不在数组的末尾。

我开始认为这不是Xcode错误,因为我只是重新启动它,得到了相同的结果。

现在,我已经实现了这个方法,这样我就可以对它调用lastObject,并获得正确的非UILayoutGuide子视图。请不要在这里使用快速枚举,因为这并不保证接收方数组中对象的顺序。

代码语言:javascript
复制
- (id)filteredSubviews:(UIView *)onView
{
    NSMutableArray *filteredSubviews = [@[] mutableCopy];
    for (int i = 0; i < onView.subviews.count; i++) 
    {
        id subview = onView.subviews[i];
        if ([subview isMemberOfClass:[UIView class]])
        {
            [filteredSubviews addObject:subview];
        }
    }

    return filteredSubviews;
}
EN

回答 1

Stack Overflow用户

发布于 2014-04-19 06:49:01

布局指南不是视图,也不应该被视为视图!是一个实现细节,您不应该依赖它作为视图布局逻辑。遍历subviews数组也不被认为是好做法,因为系统可能会在那里添加子视图,而这些子视图可能不是您所期望的(令人惊讶的是,它已经添加了!)

您应该跟踪哪个视图是最顶层的,并使用insertSubview:belowSubview:在层次结构中的正确位置添加子视图。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23166758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档