前言:

tableView 有个属性叫tableHeaderView 用它我们可以做很多事情在tableView的头部加上自定义的view 随着tableView一起滚动

常用的就是轮播图比如这样

DAD90DE4-84E9-4194-9554-40956AD01E32.png

tableView 的tableHeaderView 有两种创建方式一中是代码创建另外一种是用xib创建

用代码创建

  UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 200)];// 设置headerself.tableView.tableHeaderView = header;
  • 因为 self.tableView.tableHeaderView的高度是没有办法设置的,所以必须设置自定义View的高度 来达到设置 self.tableView.tableHeaderView的高度

用xib创建

BBSTableHeaderView * cell = [BBSTableHeaderView tableHeaderView];
cell = 291;
self.tableView.tableHeaderView = header;
  • 按理来说这样设置肯定是没有问题的 但是这时候你设置的高度是不准确的 而且是没有办法适配机型的
  • 所以这样的设置发放不可行
  • 然后这里有个小tips 很简单 但是如果你想不到的话 你可能在这个高度问题上调试一整天 比如说我

- 解决方案

    UIView * header = [[UIView alloc]init];header.backgroundColor = [UIColor whiteColor];BBSTableHeaderView * cell = [BBSTableHeaderView tableHeaderView];cell.backgroundColor = [UIColor clearColor];[header addSubview:cell];header.height = 291;self.tableView.tableHeaderView = header;
  • 原理 就是在xib View下面在加一层View (代码创建的) 这样才能保证你设置的高度是准确的 因为Xib高度 准确 必须再加一层代码创建的view才能保证你的View的高度是准确的 而且是适配各种机型的

其他

  • tableView 的顶部会由于设置tableHeaderView而变得 有一片空白

解决方案如下:

//在控制器里面viewDidLoad 写下这句代码应该就可以了self.automaticallyAdjustsScrollViewInsets = NO;/*
* 坐标:以屏幕左上角为原点(iOS7以前在状态栏或者导航条下)
2.UIScrollView(包括其子类,比如UITableView):会自动在顶部和底部预留一些空白(因为滚动经过半透明导航条或者tabbar下面,需要能隐约看到的效果),是否预留空白可以由UIViewController的
automaticallyAdjustsScrollViewInsets的这个属性控制(默认YES,表示预留空白)。
上面这些只要你用iOS开发,就能发现。一个控制器中,出现UIScrollView(包括其子类),必须是第一个添加到控制器的视图上才会预留空白,这里的第一个是相对于所有的子视图,不仅仅是其他UIScrollView(包括其子类)。那么我遇到的问题如何解决呢,还是这个属性automaticallyAdjustsScrollViewInsets,仔细看它的文档说明,它说了,如果一个控制器中出现两个以上的UIScrollView(包括其子类),这个属性需要设置为NO.即不会预留空白,那么这个控制器中所有的UIScrollView(包括其子类)都需要重新设置坐标
*/
  • 有的时候上面这种方法设置是没有用的 所以如果上面这种方法没有用很有可能是创建tableView的时候用的分组样式,
    解决方法如下
    注意:不要写0 要写一个比较小的数字 别问为什么 因为设置0 没有效果
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{return 0.01;
}- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{return 0.01;
}
  • 如果你还有其他的需求比如怎么隐藏 self.tableView.tableHeaderView 或者比如怎么改变self.tableView.tableHeaderView的高度看下面
//显示headerView
[self.tableView.tableHeaderView setHidden:NO];//隐藏headerView[self.tableView.tableHeaderView setHidden:YES];
//这样设置是没有用的 不信你可以试试 始终为0
self.tableView.tableHeaderView.height = xxx;//应该这么设置
UIView *tableHeaderView = _tableView.tableHeaderView;
tableHeaderView.height = 0.01;
[_tableView setTableHeaderView:tableHeaderView];
//如果你要设置
tableHeaderView.height = 0;//这样是没有效果的 而且tableView的顶部又会多处一片空白  一定要设置一个比较小的值 当然这个值并不是0;
												

iOS开发之tableHeaderView的那些坑相关推荐

  1. iOS开发之UIRefreshControl使用踩坑

    问题描述 接上一个话题,实现了TabBar的点击刷新以后,开始继续写完成功能,刷新UITableView,于是考虑到iOS 10以后,UIScrollView已经有UIRefreshControl的属 ...

  2. iOS开发之NSURLProtocol的那些坑

    接触过iOS系统中URL Loading System都知道,NSURLProtocol是如此地强大,可以拦截应用内几乎所有的网络请求(除了WKWebView),并可以修改请求头,返回client任意 ...

  3. IOS开发之UI基础LOL英雄展示-15

    IOS开发之UI基础LOL英雄展示-15 // // ViewController.m // 15-英雄展示-单组数据 // // Created by 鲁军 on 2021/2/3. //#impo ...

  4. iOS开发之UI开发(UITableView)

    UITableView 继承自UIScrollView,性能极佳 UITableView的两种样式 UITableViewStylePlain列表样式 UITableViewStyleGrouped ...

  5. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

  6. (0045) iOS 开发之MBProgressHUD 源码学习

    (0045) iOS 开发之MBProgressHUD 源码学习 第一部分:学习所得和分析线程 1.  学习到了kvo 的使用 和屏幕方向的旋转判断. 2. 如果调起这个 HUD 的方法不是在主线程调 ...

  7. (0016)iOS 开发之Mac上Navicat Premium 创建远程连接和本地连接

    1.下载安装 (百度云盘里面有安装文件和注册机) 链接: https://pan.baidu.com/s/1kVG1k71 密码: mr5g 破解教程看这篇博客:http://blog.csdn.ne ...

  8. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

  9. IOS开发之MD5加密和钥匙串的使用-oc

    IOS开发之MD5加密和钥匙串的使用-oc 源码在我的主页,md5加密是用户登录安全的一个保障.不可逆的,可以暴力破解的. // // ViewController.m // MD5演练 // // ...

  10. IOS开发之CALayer基本属性和使用

    IOS开发之CALayer基本属性和使用 // // ViewController.m // CALayer // // Created by 鲁军 on 2021/2/21. //#import & ...

最新文章

  1. oracle如何自动分析报告,ORACLE 性能分析报告的获取
  2. BZOJ 2039: [2009国家集训队]employ人员雇佣
  3. 2.3.6 Federate 远程访问数据库
  4. 【Flask】sqlalchemy 排序
  5. VMM2012应用指南之3-安装VMM2012
  6. new sap.ui.core.Item() - how is it initialized
  7. linux按键检测结束,关于Linux下按键的检测
  8. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 4丨游戏玩法分析 I【难度简单】
  9. 深度学习《CNN架构续篇 - 学习率衰减》
  10. jQuery原理第四天
  11. 海量数据切分抽取的实践场景(r11笔记第43天)
  12. 计算机系统-Unicode字符集与它包含的UTF-8解决方案
  13. Silverlight 中的 CoreCLR
  14. LeetCode 147. Insertion Sort List
  15. delphi mysql变体类型_Delphi 2010学习笔记(8)---数据类型(顺序类型)---2011-01-19
  16. weblogic安装以及异常解决方法【转】
  17. 【电子器件笔记1】电阻参数和选型
  18. python 去除水印_cv2 去除图片水印
  19. 找到组织了---perftest工作室 TIB工作室
  20. 华为:实现流程优化的方法

热门文章

  1. error_reporting() 错误级别详解
  2. 防火墙软件 - IPCop
  3. 第5章 深度学习和卷积神经网络
  4. RabbitMQ的问题
  5. 第一次Spring总结
  6. 报错:1130-host ... is not allowed to connect to this MySql server
  7. BZOJ3780 : 数字统计
  8. copy 回顾总结:Java中抽象类与抽象方法
  9. 在自定义HttpHandler 中使用Session
  10. 机器学习基础:评价指标(Machine Learning Fundamentals: Evaluation Metrics)