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 ...
随机推荐
- hdu 2089 不要62(入门数位dp)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- ssh连接虚拟机失败解决办法
首先,你需要知道本机IP跟虚拟机IP,然后让两者互相ping一下,看能否ping通 让主机ping虚拟机 :ping (虚拟机ip) 出现如下: 表示主机可以ping通虚拟机 然后让虚拟机ping主机 ...
- windows下 sbulime text 安装less2css踩的几个坑
sublime 就不介绍了,less2css 是一个安装在sublime上的插件,可以让你书写less后自动生成css文件,而且还可以提示less的语法错误. 搜了一下相关的教程,很多都写的不全,按照 ...
- 轻松驾驭Tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样 ...
- selenium 之 ActionChains (二)
今天,小编为大家介绍的是标题中的三个新方法,以及一个老方法 以下方法都需要操作一个名为Keys的包,先来简单认识下 ALT = u'\ue00a' CONTROL = u'\ue009' ENTER ...
- unity下跨平台excel读写
这是以前写的跨windows和ios读写excel的工具,因为原来导表工具引用的第三方读写excel的dll只能在windos下使用,造成要在mac机器上跑PC端或者打包的时候,每次都要先在windo ...
- [转载] Java中常用的加密方法
转载自http://www.iteye.com/topic/1122076/ 加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的 ...
- python win32 简单操作
源由 刚开始是帮朋友做一个按键精灵操作旺信的脚本,写完后各种不稳定:后来看到python可以操作win32相关的api,恰好这一段时间正在学习python,感觉练手的时候到了~~~ 下载 要注意Pyt ...
- DocsBuilderGUI 工具使用介绍
- 单节点下使用docker部署consul
部署consul 目前Consul使用的版本是: v1.0.1 本教程适用于刚刚开始学习consul并简单使用consul的同学,可以在短时间内了解conusl,配合官方文档https://www.c ...