UITableView添加头部视图,并解决添加后无法滑动的问题

在UITableView里面添加了头部视图后,如果头部视图大于界面的高度,可以滑动,但是如果这时候再给添加cell的时候,发现cell并不出现,而且头部也不能滑动,即使可以滑动也没有出现cell。

只要继承UITableView,并重写一个方法,就可以解决该问题。

//去掉 UItableview headerview 黏性(sticky)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView == self)
    {
        CGFloat sectionHeaderHeight = 200; //sectionHeaderHeight
        if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
            scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
        } else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
            scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
        }
    }
}

在这里,sectionHeaderHeight是你自定义的头部视图的高度。

然后问题就解决了。
该文章先这么潦草写,后面会进行修改,并把添加头部视图的方法记录下来。

给UITableView添加头部视图

首先,先创建头部视图TableHeader类,继承于UITableViewHeaderFooterView,然后实现-(instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier{
if (self=[super initWithReuseIdentifier:reuseIdentifier])方法

在这里,我会贴出我的代码,可能命名不一样,自己知道就好了
DetailsTableHeader.h

#import <UIKit/UIKit.h>
#import "BannerView.h"
@interface DetailsTableHeader : UITableViewHeaderFooterView<BannerViewDelegate>

@property (nonatomic,strong) NSDictionary *data;

/**文字属性*/
@property (nonatomic,copy)NSString * text;
@end

DetailsTableHeader.m

//
//  DetailsTableHeader.m
//  ego
//
//  Created by xihao on 17/7/31.
//  Copyright © 2017年 yidont. All rights reserved.
//

#import "DetailsTableHeader.h"

@implementation DetailsTableHeader{
@private  BannerView *bannerView;

@private DetailsContentView *contentView;
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

-(instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier{
    if (self=[super initWithReuseIdentifier:reuseIdentifier]) {

        bannerView=[BannerView init:CGRectMake(0, 0, HEAD_W, HEAD_W) Data:nil delegate:self];

        contentView=[[DetailsContentView alloc ]initWithFrame:CGRectMake(0, HEAD_W, HEAD_W, content_height)];

        [self addSubview:bannerView];

        [self addSubview:contentView];

    }
    return self;
}
-(void)setData:(NSDictionary *)data{

}

- (BOOL)didSelectItemAtIndex:(NSInteger)index{

    return YES;
}

@end

搞完头部视图之后,接下来就是在UITableView里面注册头部视图,并添加,具体的实现是

先定义一个头部视图的宏,接下来可以全局使用,然后在tableview里注册头部视图,之后实现里面两个方法,一个是返回头部视图的具体高度,另外一个是返回头部视图的对象,代码如下:

#define header_store @"details_header"

//注册头视图
    [self registerClass:[DetailsTableHeader class] forHeaderFooterViewReuseIdentifier:header_store];



-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

    if (headerView ==nil) {
        headerView=[tableView dequeueReusableHeaderFooterViewWithIdentifier:header_store];
    }

    return headerView;
}

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return HEAD_W+content_height;
}

基本就这么简单,还没遇到其他什么奇葩搞不定的问题,ios还是没有android的熟悉,搞起项目来速度有点慢,遇到的问题也挺多的,哈哈哈哈哈哈。

QQ:361561789
可事可以直接加Q联系

猜你喜欢

转载自blog.csdn.net/chen_xi_hao/article/details/76457411
今日推荐