Dan*_*edo 5 objective-c uiscrollview ios
我正在使用从UIScrollView继承的自定义视图.我遇到的问题是添加一个应该在其他视图前面的"顶部"显示的UILabel.它很有效,但不幸的是它也掩盖了滚动指示器.
如您所见,滚动指示器被遮挡.我不想禁用滚动指示器.
我将视图直接添加到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];
Run Code Online (Sandbox Code Playgroud)
然后把它们带到前面,哪个
- (void) bringSubsectionsToFront {
for (UIView* row in [self.subSectionRows allValues]) {
[self bringSubviewToFront:row];
}
}
Run Code Online (Sandbox Code Playgroud)
这种行为让我感到困惑.如果我查看UIView.layer.zPosition
所有UIScrollView的子视图,它们都是一样的.
如果我调整bringSubsectionsToFront
方法而不是在包含网格线的视图前移动标签,则行为是相同的.
查看一些行为有效的内部视图类,看起来好像它们被添加到滚动视图中: [self insertSubview:cell atIndex:0];
我在这里错过了什么?
解决方案: verec评论说,如果我真的想要,我可以找到这些酒吧.所以我在适当的时候迭代了子视图列表,果然,他们在那里.对象的顺序如下:
CustomCell
...
UIImageView
UIImageView
CustomBorderView
UILabel
UILabel
Run Code Online (Sandbox Code Playgroud)
假设这是z排序,难怪我的标签总是排在最前面.
解决方案变得简单 在CustomCells之后添加UILabel.此解决方案仅适用,因为自定义表在索引0处添加了CustomCells,我相信在CustomCells之后会出现滚动指示符.如果这个假设成立,我可以重新排序相对于CustomCells的其他视图,实现我想要的分层效果.
最简单的方法是使用中间 UIView,将其称为“contentView”,其子级是您想要带到Front 的视图。
如果该 contentView 位于滚动视图内部,则无论您将哪个 contentView 子项带到前面,它都将保持在滚动指示器的“下方”。
另一种方法是扫描到滚动视图中寻找滚动指示器(你会找到它们!),但这是一个兼容性风险,因为你永远不知道苹果是否/何时可能决定根据一些新的(更扁平的)删除/重塑/重新定位它们...)设计范式...
归档时间: |
|
查看次数: |
2291 次 |
最近记录: |