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

news/2024/7/5 23:59:34 标签: uitableview, header, ios

在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添加头部视图">给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联系


http://www.niftyadmin.cn/n/994359.html

相关文章

大唐电信:转让2家子公司股权 或带来约2.1亿的收益

2017年9月13日&#xff0c;大唐电信发布公告称&#xff0c;公司通过产权交易所公开挂牌的方式同时对外转让公司全资子公司大唐终端技术有限公司(以下简称&#xff1a;终端技术)持有的上海优思通信科技有限公司(以下简称&#xff1a;上海优思)和深圳优思伟业通信科技有限公司(以…

ios obj-c 延迟时间后没收到通知就执行操作

不论是在android还是ios&#xff0c;都会有个问题&#xff0c;就是根据输入框内容进行接下来操作&#xff0c;如果是请求网络数据的话&#xff0c;那么随时改变文本内容就直接请求网络的话&#xff0c;想象一下&#xff0c;快速删除文本&#xff0c;几十毫秒删掉一个字符串&…

SQL2K数据库开发五之表操作管理用户定义的数据类型

1.可以使用系统过程sp_addtype来增加一个用户定义的数据类型。下图表明了sp_addtype过程的用法&#xff1a; 2.可以在查询分析器中使用下面的语句创建一个名为birthday的用户定义数据类型。该数据类型是基于datetime的&#xff0c;并允许为空值。 3.在SQL Server企业管理器中创…

3种方式遍历repeater中的CheckBox全选

方式1: foreach (Control c in this.Repeater1.Controls) { HtmlInputCheckBox check (HtmlInputCheckBox)c.FindControl("cbDelete1"); if( check ! null ) { check.Checked true; } } 方式2: for (int i0;i<this.Repeater1.Items.Count;i) …

SQL Server数据库服务器负载均衡集群的实现

MS SQL Server数据库服务器可以说是应用范围最广的数据库产品&#xff0c;并且越来越多地在大型和比较关键的应用系统中提供服务。当企业应用越来越复杂、数据量越来越大的时候&#xff0c;SQL Server数据库要不停的进行处理、存储、查询的工作&#xff0c;这个时候企业就要考虑…

Cookies 和 Session的区别

2019独角兽企业重金招聘Python工程师标准>>> Cookies 和 Session的区别 1.cookie 是一种发送到客户浏览器的文本串句柄&#xff0c;并保存在客户机硬盘上&#xff0c;可以用来在某个WEB站点会话间持久的保持数据。 2.session其实指的就是访问者从到达某个特定主页到…

ios obj-c KVO模式的介绍和使用

在项目需求中&#xff0c;其中有一个需求是监听某个自定义View的隐藏显示来进行其他操作&#xff0c;比如说自定义View里面有个UITextField&#xff0c;当软键盘显示时&#xff0c;隐藏该自定义View的时候需要把软键盘也隐藏掉&#xff0c;这时候如果在依赖该自定义view的类当中…

.net 软件注册功能的简单实现

相信很多初学编程的人都会对这个软件注册功能很感兴趣&#xff0c;我也不例外&#xff0c;刚学asp.net时&#xff0c;竞找不到这方面的实例&#xff0c;结果自己参考微软的一些文档自己做了一个&#xff0c;其实我做的这个注册功能很简单&#xff0c;读取计算机的CPU序列号&…