UITableViewStyleGrouped模式下烦人的多余间距

第一个section上边多余间距处理

// 隐藏UITableViewStyleGrouped上边多余的间隔
_tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, CGFLOAT_MIN)];

每个section下边多余间距处理

// 隐藏UITableViewStyleGrouped下边多余的间隔
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}
  • 备注:若传入的 height == 0,则 height 被设置成默认值
  • 若 height 小于屏幕半像素对应的高度,则不会被渲染,所以这里返回CGFLOAT_MIN,其实返回0.01也是可以的

补充:代码顺序的不同导致第一个section上边出现多余间距

  • 在设置代理设置tableFooterView,上边会出现多余间距
tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
tableView.tableFooterView = [UIView new];
tableView.delegate = self;
tableView.dataSource = self;
  • 在设置代理设置tableFooterView,上边不会出现多余间距
tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
tableView.delegate = self;
tableView.dataSource = self;
tableView.tableFooterView = [UIView new];
  • 可以通过第一个section上边多余间距处理的办法来解决因代码顺序导致的上述问题,所以这里建议要解决第一个section上边多余间距还是通过文章开头所说的解决办法更好

在 Storyboard 中 0 代码搞定

没用 Storyboard 的同学使用上面的代码就 OK 了; 而在 Storyboard 中可以 0 代码搞定这个事:

首先,在第一个 Section 的上面拖进来一个空 UIView

然后选中这个 UIView 的 Runtime Attributes 栏,添加一个 frame 的 KeyPath

这样头部的间隔就乖乖的不见了:

刨根问底 UITableViewHeader 的猫腻

为什么刚才说 0.1 和 CGFLOAT_MIN 是等效的呢?经过研究,这个高度值的影响大概是这样的:

  1. 若传入的 height == 0,则 height 被设置成默认值
  2. 若 height 小于屏幕半像素对应的高度,这个 header 不在另一个像素渲染

半像素也就是 1.0 / scale / 2.0,如在 @2x 屏上是 0.25
直观的感受下,假如这个 height 被设置成 0.5 的样子:

导航栏下面的阴影线看上去宽了 0.5 像素的,Done。

参考文章

原文地址:https://www.cnblogs.com/lurenq/p/8133973.html

时间: 2024-08-30 13:44:40

UITableViewStyleGrouped模式下烦人的多余间距的相关文章

【转】【Stackoverflow好问题】去掉烦人的“!=null"(判空语句)

[Stackoverflow好问题]去掉烦人的“!=null"(判空语句) 问题 为了避免空指针调用,我们经常会看到这样的语句 ...if (someobject != null) {   someobject.doCalc();}... 最终,项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢? 精华回答: 这是初.中级程序猿经常会遇到的问题.他们总喜欢在方法中返回null,因此,在调用这些方法时,也不得不去判空.另外,也许受此习惯影响,他们总潜意识地认为,所有的返

VIJOS PID221 / 烦人的幻灯片

 暴力出奇迹,古人诚不欺我. PID221 / 烦人的幻灯片 2017-04-14 19:47:08 运行耗时:30 ms 运行内存:12292 KB 查看最后一次评测记录 题目描述 李教授于今天下午做一个非常重要的演讲.不幸的是他不是一个非常爱整洁的人,他把自己做演讲要用的幻灯片随便堆放在一起.因此,演讲之前他不得不去整理这些幻灯片.做为一个讲求效率的学者,他希望尽可能简单地完成它.情况是这样,教授这次演讲一共要用n张幻灯片(n<=26),这n张幻灯片按照演讲要使用的顺序已经用数字1,2,-,

4735 烦人的幻灯片 (拓扑)

4735 烦人的幻灯片 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 帅气的作者将于今天下午作一次非常重要的演讲.不幸的是他不是一个非常爱整洁的人,他把自己演讲要用的幻灯片随便堆在了一起.因此,演讲之前他不得不去整理这些幻灯片.作为一个讲求效率的oier,他希望尽可能简单地完成它.帅气的作者这次演讲一共要用n张幻灯片(n<=26),这n张幻灯片按照演讲要使用的顺序已经用数字1~n编了号.因为幻灯片是透明的,所以我们不能一下子看

浅析WPF中MVVM模式下命令与委托的关系

??各位朋友大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com.最近因为项目上的原因开始接触WPF,或许这样一个在现在来讲显得过时的东西,我猜大家不会有兴趣去了解,可是你不会明白对某些保守的项目来讲,安全性比先进性更为重要,所以当你发现银行这类机构还在使用各种"复古"的软件系统的时候,你应该相信这类东西的确有它们存在的意义.与此同时,你会更加深刻地明白一个道理:技术是否先进性和其流行程度本身并无直接联系.由此我们可以推论出:一项不流行

AngularJS中在前后端分离模式下实现权限控制 - 基于RBAC

权限的设计中比较常见的就是RBAC基于角色的访问控制,基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合.每一种角色对应一组相应的权限. 一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限.这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销. 在Angular构建的单页面应用中,要实现这样的架构我们需要额外多做一些事

使用call、apply和bind解决js中烦人的this,事件绑定时的this和传参问题

1.什么是this 在JavaScript中this可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式,this 绑定的对象即函数执行的上下文环境(context). 为了帮助理解,让我们来一起看一段代码: // 作为对象方法调用 var test = { a : 5, b : 6, sum : function () { return this.a + this.b; // 此处this = test } } alert(test.sum()); // 11 作为对象调用时thi

为什么EA在STP模式下能够获利?

在金融市场中有一部分交易者是技术控,他们对使用EA近乎痴迷.目前市场上流通了大量的EA交易软件,但99%的人使用过后都认为这样的EA并不能替我赚钱.不禁想问若让EA能够获利有什么样的好方法呢?本文将阐述EA交易如何在STP模式下稳定获利,在此之前,首先要讲明什么是EA. EA的全称为智能交易系统 (Expert Advisor),简称EA.是编程人员根据不同交易情景编写的一套用于MT4平台的程序化交易系统,在电脑上按照事先设定好的条件自动化完成交易操作.也就是说EA它替代了交易者在使用过程中的操

Linux下套接字详解(十)---epoll模式下的IO多路复用服务器

epoll模型简介 epoll可是当前在Linux下开发大规模并发网络程序的热门人选,epoll 在Linux2.6内核中正式引入,和select相似,其实都I/O多路复用技术而已,并没有什么神秘的. 其实在Linux下设计并发网络程序,向来不缺少方法,比如典型的Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,以及select模型和poll模型,那为何还要再引入Epoll这个东东呢?那还是有得说说的- 常用模型

MVVM模式下如何使用ReactiveCocoa响应链式编程&lt;一&gt;

前一阵子公司要求项目从新架构,但又只给不到一个月的时间,这显然是不可能的.但从新架构又是在所难免的,和同事商定后决定一部分交互逻辑比较少的界面先使用MVVM架构,然后慢慢修改.下面整理了一下这次重构的遇到的问题,并希望能给大家一些帮助. 1.ReactiveCocoa的使用 要使用MVVM模式编程收下选择一个框架,当然不仅仅是ReactiveCocoa这一个框架,这里就不多说.当然我也没用过别的,如果哪位看官用过可以多多指教.接下来我就按步骤说了: 第一步:导入ReactiveCocoa框架,建