最近遇见了一个很小也很奇怪的问题,正常设置tableview的组头,但是一滚动就不见了!也真是见鬼了!搞得我是抓脑搔耳啊!
然后我就尝试各种方法,比如:
1、组头view的背景颜色改变,因为我是使用Xib创建的view,然后view的背景颜色backgroundcolor设置为Default或者Whitecolor等等都不见效;
2、猜测是不是因为没有设置组尾secitonFooterView引起的,然后使用下面方法设置组尾,但是把组尾的高度设置为了0.01,相当于看不见。
-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section{
UIView *header = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 30)];
header.backgroundColor = [UIColor greenColor];
return header;
}
-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section{
return 0.01;
}
但是依然没啥鸟用!
3、接着我就继续尝试是不是创建tableview的时候Stype不对?就尝试了UITableViewStylePlain和UITableViewStyleGrouped,如下创建:
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
// self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
self.tableView.delegate=self;
self.tableView.dataSource=self;
self.tableView.tableFooterView = [UIView new];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];
[self.view addSubview:self.tableView];
但是依然如你所料,没啥用,问题依然存在!
下面就展示一下当初创建组头和设置组头的方式:
1、在@interface设置组头属性
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
//tableview
@property (nonatomic,strong) UITableView *tableView;
//组头
@property(nonatomic,strong)UIView*sectionHeaderView;
@end
2、懒加载组头
-(UIView*)sectionHeaderView{
if (_sectionHeaderView == nil) {
_sectionHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 50)];
_sectionHeaderView.backgroundColor = [UIColor blueColor];
}
return _sectionHeaderView;
}
3、在@implementation中设置组头和组头高度
-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section{
return self.sectionHeaderView;
}
-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section{
return50;
}
最后代码运行的效果如下:
效果图这东西搞得我连晚上洗澡和睡觉都还在想,第二天早上一来,接着说既然自己的xib创建不行(为了演示本文中采取用的原生的UIView,但效果和原理是一样的),那么我尝试一下随便在代理方法中创建一个view试一下,哇哇哇。。。!!!什么鬼!没问题啊,组头正常展示以及正常悬停!
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ XMFSectionHeaderView *sectionHeaderView = [[[NSBundle mainBundle] loadNibNamed:@"XMFSectionHeaderView" owner:nil options:nil] firstObject]; return sectionHeaderView; }
恍然大悟!问题出在懒加载组头上面!!!
下面完整贴一下整个代码:
#import "ViewController.h"
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (nonatomic,strong) UITableView *tableView;
@property(nonatomic,strong)UIView*sectionHeaderView;
@end
@implementationViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
self.tableView.delegate=self;
self.tableView.dataSource=self;
self.tableView.tableFooterView = [UIView new];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];
[self.view addSubview:self.tableView];
}
-(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView{
return10;
}
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{
return5;
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell" forIndexPath:indexPath];
cell.textLabel.text = [NSString stringWithFormat:@"%zd组%zd行",indexPath.section,indexPath.row];
returncell;
}
-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section{
UIView *header = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 50)];
header.backgroundColor = [UIColor redColor];
returnheader;
}
-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section{
return50;
}
//-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
// UIView *header = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 30)];
// header.backgroundColor = [UIColor greenColor];
// return header;
//}
//-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
//
// return 0.01;
//}
-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
}
展示一下正常之后的效果啊!
组头效果图
网友评论