UIScrollView - 将视图移动到前面,但在滚动指示器下面

时间:2013-03-22 21:15:47

标签: ios objective-c uiscrollview

我正在使用从UIScrollView继承的自定义视图。我遇到的问题是添加一个应该在其他视图前面的“顶部”显示的UILabel。它很有用,但不幸的是它也掩盖了滚动指示器。

enter image description here

如您所见,滚动指示器被遮挡。我不想禁用滚动指示器。

我将视图直接添加到UIScrollView:

UILabel *subsection = [[UILabel alloc] initWithFrame:CGRectMake(0, y * h, 
    [self totalContentWidth], [tableViewDelegate rowHeight])];
[subsection setText:subsectionName];
[subsection setTextAlignment:NSTextAlignmentCenter];

[subSectionRows setValue:subsection forKey:key];

[self addSubview:subsection];

然后将它们带到前面,

- (void) bringSubsectionsToFront {   
    for (UIView* row in [self.subSectionRows allValues]) {
        [self bringSubviewToFront:row];
    }
}

这种行为让我感到困惑。如果我查看所有UIScrollView子视图的UIView.layer.zPosition,它们都是相同的。

如果我调整bringSubsectionsToFront方法而不是在包含网格线的视图前移动标签,则行为是相同的。

查看一些行为有效的内部视图类,看起来好像它们被添加到滚动视图中:[self insertSubview:cell atIndex:0];

我在这里缺少什么?

解决方案: 韦雷克说,如果我真的想要的话,我可以找到这些酒吧。所以我在适当的时候迭代了子视图列表,果然,他们在那里。对象的顺序如下:

CustomCell
...
UIImageView
UIImageView
CustomBorderView
UILabel
UILabel

假设这是z排序,难怪我的标签总是在顶部。

解决方案变得简单;在CustomCells之后添加UILabel。此解决方案仅适用,因为自定义表在索引0处添加了CustomCells,我相信在CustomCells之后会出现滚动指示符。如果这个假设成立,我可以重新排序相对于CustomCells的其他视图,实现我想要的分层效果。

1 个答案:

答案 0 :(得分:4)

最简单的是使用和中间UIView,称之为'contentView',其子节点是你想要带来的视图。

如果contentView是scrollView中的内容,它将保留在滚动指示器的“下方”,无论您将哪个contentView子项带到前面。

另一种方法是扫描到scrollView中寻找滚动指示器(你会发现它们!)但这是一种兼容性风险,因为你永远都不知道Apple何时/何时决定根据某些人移除/重塑/重新定位它们新的(奉承......)设计范例......