在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联系