1. 程式人生 > >UITableView新增頭部檢視,並解決新增後無法滑動的問題

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聯絡