![](/img/trans.png)
[英]Putting UISearchBar in a custom UITableview causing weird animation
[英]Putting a custom view into a UITableView
我有一个常规样式的UITableView,它具有白色背景和灰色水平线以分隔行。
我还有另一个自定义UIView,它只是一个100x100的矩形,填充了redColor。
如何将后者放入前者中,以便它出现在水平线上,但仍然是表格视图的“一部分”,即当我在周围滚动表格视图时,红色视图也会随之滚动? 实际上,我还应该可以将手指放在红色区域上并滚动表格视图。
同样,如果将红色视图放置为与某些水平线重叠,则该红色视图应显示在这些线的上方 。 可悲的是,当我仅将红色视图作为子视图添加到表格视图时,水平线越过红色视图; 看到这个截图 。
如何做到这一点?
处理红场的堆叠顺序的正确位置是在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];
}
编辑
如果您试图将视图添加到行上方(隐藏行),请尝试使用– bringSubviewToFront:
将其置于表格视图的前面。
[self.tableView bringSubviewToFront:redView];
其他
将视图添加到self.tableView.tableHeaderView
这会将其放置在表格视图上方,并随表格视图滚动。
UIView *redView = [[UIView alloc]init];
redView.frame = //set the frame
redView.backgroundColor = [UIColor redColor];
self.tableView.tableHeaderView = redView;
祝好运
使您的视图成为UITableView
的任何常规子视图的子视图:标头,页脚或任何UITableViewCell
。
我认为您所描述的内容最好使用UITableViewCell
或标题的子视图来实现。 单元格具有滚动表的固有能力,可以按您喜欢的任何方式进行自定义。 本质上是一种观点。
例如,根据您的情况,您可能希望红色框默认显示在表格顶部。 您将第一个单元格设置为“红色框”单元格,然后将红色框插入该单元格的内容视图。
因此,您的问题基本上是,将UITableView的UITableViewCells动态添加为子视图,并且无法控制是否将它们添加到视图的前面或后面。
因此,要将视图保持在最前面,您需要在每次添加单元格时将其放回到此处,这是在UITableView滚动时发生的。
我建议您尝试将自定义视图添加为子视图,然后像这样重写-scrollViewDidScroll
:
- (void)scrollViewDidScroll {
[super scrollViewDidScroll];
// myCustomView is your custom view referenced in an IVar
[self.tableView bringSubviewToFront:myCustomView];
}
使用这些行编辑viewWillAppear委托
UIView *redView=[[UIView alloc]initWithFrame:CGRectMake(30,30, 100, 100)];
redView.backgroundColor=[UIColor redColor];
[self.tableView addSubview:redView];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.