美文网首页iOS开发点滴iOS 开发继续加油
关于tableview组头不见了以及组头sectionHeade

关于tableview组头不见了以及组头sectionHeade

作者: 小蜜蜂Bee | 来源:发表于2019-06-03 11:57 被阅读3次

            最近遇见了一个很小也很奇怪的问题,正常设置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{

    }

    展示一下正常之后的效果啊!

    组头效果图

    相关文章

      网友评论

        本文标题:关于tableview组头不见了以及组头sectionHeade

        本文链接:https://www.haomeiwen.com/subject/elaqxctx.html