我有一个普通风格的UITableView--一个白色背景和灰色水平线来分隔行。
我有另一个自定义UIView,它只是一个填充了redColor的100x100矩形。
如何将后者置于前者中,使其在水平线上显示 ,但在滚动表格视图时仍然是表格视图的“部分”周围,红色视图滚动它?事实上,我还应该能够将手指放在红色区域并滚动表格视图。
再次,如果红色视图与某些水平线重叠,则它应显示为 线条。可悲的是,当我只是将红色视图作为子视图添加到表视图时,水平线会越过红色视图;见this screenshot。
如何实现这一目标?
答案 0 :(得分:12)
处理红色方块堆叠顺序的正确位置是layoutSubviews
方法。每次添加或删除子视图时(以及其他时间),表格视图都会自行发送layoutSubviews
。
您需要创建一个UITableView
的子类,其中包含对红色方块的引用:
@interface MyTableView : UITableView
@property (weak, readonly) IBOutlet UIView *redSquare;
@end
您可以以任何方式初始化redSquare
。我只是将它与表视图一起放在我的笔尖中,并将其移动为awakeFromNib
中表视图的子视图:
@implementation MyTableView
@synthesize redSquare = _redSquare;
- (void)awakeFromNib {
[self addSubview:self.redSquare];
}
无论如何,要确保红色方块始终位于表格单元格和网格线的顶部,请覆盖layoutSubviews
,如下所示:
- (void)layoutSubviews {
[super layoutSubviews];
[self bringSubviewToFront:self.redSquare];
}
答案 1 :(得分:6)
修改强>
如果您尝试在视图上方添加视图(隐藏线条),请尝试使用– bringSubviewToFront:
将其带到表格视图的前面。
[self.tableView bringSubviewToFront:redView];
<强> ELSE 强>
将视图添加到self.tableView.tableHeaderView
,这会将其放在表格视图上方,并使用表格视图滚动。
UIView *redView = [[UIView alloc]init];
redView.frame = //set the frame
redView.backgroundColor = [UIColor redColor];
self.tableView.tableHeaderView = redView;
祝你好运
答案 2 :(得分:1)
答案 3 :(得分:0)
将您的观看视为UITableView
的任何正常子视图的子视图:标题,页脚或任何UITableViewCell
。
答案 4 :(得分:0)
我认为您所描述的内容最好使用UITableViewCell
甚至是标题的子视图来实现。单元格具有滚动表格的固有能力,可以按照您喜欢的方式进行自定义。它本质上是一种观点。
例如,在您的情况下,您可能希望红色框默认显示在表格的顶部。您可以将第一个单元格设置为“红色框”单元格,然后将红色框插入单元格的内容视图中。
答案 5 :(得分:0)
所以,你的问题基本上是,UITableView的UITableViewCells被动态添加为Subviews,你无法控制它们是在视图的前面还是后面添加。
因此,为了保持您的视图在前面,您需要在每次添加单元格时将其返回到该位置,这在UITableView滚动时会发生。
我建议您尝试将自定义视图添加为子视图,然后覆盖-scrollViewDidScroll
,如下所示:
- (void)scrollViewDidScroll {
[super scrollViewDidScroll];
// myCustomView is your custom view referenced in an IVar
[self.tableView bringSubviewToFront:myCustomView];
}
答案 6 :(得分:0)
使用这些行编辑viewWillAppear委托
UIView *redView=[[UIView alloc]initWithFrame:CGRectMake(30,30, 100, 100)];
redView.backgroundColor=[UIColor redColor];
[self.tableView addSubview:redView];