UITableView使用过程中可能遇到的问题
前言:记录一些UITableView使用过程中可能遇到的问题
环境:Xcode9
- 解决UITableViewStyleGrouped类型的TableView的cell距离顶部有距离的问题:
tableV.tableHeaderView = [[UIView alloc]initWithFrame:CGRectMake(, , , CGFLOAT_MIN)];
- 解决分割线相关的问题
- 方法1:对UITableView下手:这种方法是一种官方挑明的处理方式
if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
//Specifies the default inset of cell separators.
//该方法是在iOS7之后新增的属性之前都是分割线一直到边的后来的时候才是需要人为地去设置分割线到边 In iOS 7 and later, cell separators do not extend all the way to the edge of the table view. This property sets the default inset for all cells in the table,
[tableV setSeparatorInset:UIEdgeInsetsZero];
}
- 方法2:对Cell下手:这种方式是考虑到了其实那些分割线是cell的子视图
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
/*
The inset values for the cell’s content.
You can use this property to add space between the current cell’s contents and the left and right edges of the table. Positive inset values move the cell content and cell separator inward and away from the table edges. Negative values are treated as if the inset is set to 0.
cell的内容边距
为了添加在当前的cell的内容与table左右的边距 可以设置这个属性
正值是移动Cell的内容相对table边距 向里或者是远离 向里边收
负值是被看作是0一样
*/
}
思考:其实为什么设置了这个属性就能够起作用呢,打印cell.subViews
-[WWLearnViewController tableView:cellForRowAtIndexPath:] [Line ] (
"<UITableViewCellContentView: 0x7ff69b407420; frame = (0 0; 414 44.6667); gestureRecognizers = <NSArray: 0x60400025d760>; layer = <CALayer: 0x60400002ffa0>>",
"<_UITableViewCellSeparatorView: 0x7ff69b70f430; frame = (0 44.6667; 414 0.333333); layer = <CALayer: 0x60000002b100>>",
"<_UITableViewCellSeparatorView: 0x7ff69b70f880; frame = (0 0; 414 0.333333); layer = <CALayer: 0x60000002b220>>"
)
可以发现:
_UITableViewCellSeparatorView这个视图应该就是tableView的分割线视图
相关的验证可以在自定义的cell的时候,可以利用runtime相关的只是获取到私有分隔线属性名字,然后通过KVC的方法获取到cell的私有属性的分隔线视图,并且改变其颜色得到
没有赋值的Cell这会儿是默认的Cell的高度44 point,而且宽度都还是320,不知道这个320是不是 iPhone 2G, 3G, 3GS,iPhone 4, 4s,iPhone 5, 5s, 5c, SE之前的传统问题
"<UITableViewCellContentView: 0x7fabd6d22ca0; frame = (0 0; 320 44); gestureRecognizers = <NSArray: 0x60400025a610>; layer = <CALayer: 0x604000428020>>"
简单赋值的没有改变行高的Cell
"<UITableViewCell: 0x7fabd8076a00; frame = (0 710; 414 45); text = 'textLabel'; autoresize = W; layer = <CALayer: 0x6040004294c0>>"
"<UITableViewCellContentView: 0x7fabd6d23e30; frame = (0 0; 414 44.6667); gestureRecognizers = <NSArray: 0x604000258a20>; layer = <CALayer: 0x604000429420>>",
"<_UITableViewCellSeparatorView: 0x7fabd6c0c650; frame = (0 44.6667; 414 0.333333); layer = <CALayer: 0x6040004297c0>>"
没有改变过行高地简单赋过值cell的默认的高度是45 point ,有的是全占,有的是加上分隔线一起45pt
方法3:苹果官方包括网上也有提到说使用下列的属性
只不过我试过了之后没有起到效果:也可能是哪些地方设置的有问题,如果你知道,你可以评论给我:
// 在iPhone8 plus的模拟器上 下边的这个暂时不管用
[cell setLayoutMargins:UIEdgeInsetsZero];//(iOS8) [cell setDirectionalLayoutMargins:NSDirectionalEdgeInsetsZero];//(iOS11)
cell.preservesSuperviewLayoutMargins = NO;//iOS8
- 关于UITableViewCell的重用的问题:
Cell的重用确实能够提高性能,有的时候重用可能会带来额外的效果,比如说是有选中Cell的效果的时候,可能UITableView一滚动,就导致之前的选中的效果没了,这个问题有多种处理方法,那么先提供一中比较方便的办法,可能性能不是很好,就是根据在cell的重用的时候根据indexPath来使用不同的重用标识
代码:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"reuseId%zd",indexPath.row]];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[NSString stringWithFormat:@"reuseId%zd",indexPath.row]];
}
以后要补充性能优化相关的内容在这里:
参考网址:
http://blog.sunnyxx.com/2015/04/15/ios-hide-grouped-tableview-header/
https://www.cnblogs.com/Zev_Fung/p/5654420.html
iOS交流群欢迎你的加入!
群二维码:

先写到这么多
如有问题,敬请指正;
如需转载,请注明出处,谢谢!
UITableView使用过程中可能遇到的问题的更多相关文章
- 单点登陆CAS安装过程中可能遇到的问题
可能遇到的问题: 错误: java.security.cert.CertificateException: No name matching localhost found 原因: keystore里 ...
- Hadoop/Spark环境运行过程中可能遇到的问题或注意事项
1.集群启动的时候,从节点的datanode没有启动 问题原因:从节点的tmp/data下的配置文件中的clusterID与主节点的tmp/data下的配置文件中的clusterID不一致,导致集群启 ...
- 【甘道夫】HBase开发环境搭建过程中可能遇到的异常:No FileSystem for scheme: hdfs
异常: 2014-02-24 12:15:48,507 WARN [Thread-2] util.DynamicClassLoader (DynamicClassLoader.java:<in ...
- hadoop环境配置过程中可能遇到问题的解决方案
Failed to set setXIncludeAware(true) for parser 遇到此问题一般是jar包冲突的问题.一种情况是我们向java的lib目录添加我们自己的jar包导致had ...
- DB2安装过程中可能遇到的错误
WARNING:DBT3534W The db2prereqcheck utility determined that ASLR is set to ON and that this could c ...
- (原)使用 memcache 使用过程中可能遇到的问题
在项目优化中,使用到了memcache,刚开始不能用,后来期间总会偶尔抛出异常,刚开始怀疑动态库版本问题,后来尝试了各种替换依旧误解,搞得我日思夜想的,天天惦记着他..=_= 下午拿出半天时间,进行错 ...
- Java 实现Excel表数据的读取和写入 以及过程中可能遇到的问题
问题1:Unable to recognize OLE stream 格式的问题要可能是因为给的数据是2010年的数据表后缀为.xlsx,要先转化成2003版的后缀为.xls 问题2: Warning ...
- vue及Eelement使用过程中遇到的一些问题
在做项目的过程中,目前主要遇到了以下几个问题: 一.样式问题 1.样式中使用scoped的问题: 主要表现在从一个页面跳到另一个页面时,第二个页面的样式不能正确显示,通过刷新才能恢复页面的预定样式. ...
- nginx源码编译以及源码编译过程中遇到的问题
本文主要讲nginx安装以及安装过程中遇到的问题. 谈到nginx 必须聊聊它的起源和发展. nginx是由俄罗斯工程师Igor Sysoev 用C语言开发的一个免费开源的Web服务器软件,于2004 ...
随机推荐
- hadoop命令
1.查看指定目录下内容 Hadoop dfs –ls [文件目录] eg: hadoop dfs –ls /user/wangkai.pt 2.打开某个已存在文件 hadoop dfs –cat [f ...
- Nginx HTTP 核心模块
原文链接:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=17238776&id=2982697aio 语法:aio [ ...
- ldap数据库--ODSEE--卸载
针对ldap实例的卸载,即删除,可以通过管理界面进行操作也可以通过命令行进行操作.卸载顺序为ldap实例--agent--ads.这里主要介绍命令操作步骤 1,ldap实例卸载 从ads注销,即不在需 ...
- Ubuntu系统下静态DNS配置详解
1.DNS服务的简介: DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器.DNS中保存了一张域 ...
- CentOS卸载原有旧版OPENJDK并安装SUNJDK解决方案
PS:由于图片是安装后进行截图所以出现的是1.8版本,步骤是完全正确的. 一.检测JDK 首先你要打开终端,为避免可能出现的权限问题建议直接su进入root.(PS:密码可以输入但不显示) 然后输入j ...
- [转载] ZooKeeper的Java客户端API
转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExampl ...
- wealoha thrift-client-pool 总结
DefaultEvictionPolicy类是EvictionPolicy接口的实现主要描述,pool中那些idel对象会被Evict,回收.关键代码如下: public boolean evict( ...
- unique & lower_bound C++
原来C++也有unique和lower_bound,只需头文件iostream unique unique可以对数组进行相邻元素的"去重",实现效果是把所有不重复的元素按顺序放在数 ...
- ligerUI---ListBox(列表框可移动)
写在前面: 对于可移动的列表框,ligerui中也对其进行了封装,可以直接照着demo拿来用,不过那都是直接在页面上静态初始化的数据,那么如何从后台获取? 前面有了对ligerui的一些组件的使用经验 ...
- Java URL类踩坑指南
背景介绍 最近再做一个RSS阅读工具给自己用,其中一个环节是从服务器端获取一个包含了RSS源列表的json文件,再根据这个json文件下载.解析RSS内容.核心代码如下: class Presente ...