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 ...
随机推荐
- js获取浏览器版本
获取火狐,谷歌,ie,常见浏览器的方法 function myBrowser(){ var userAgent = navigator.userAgent, rMsie = /(msie\s|trid ...
- Deploy .Net project automatically with MsBuild and MsDeploy (0)
I will use a example of my project to show how to use MS Build and MS Deploy in a real project and s ...
- [java语言]——InetAddress类的getByName()方法
InetAddress---表示互联网协议(IP)地址 ---InetAddress.getByName("www.163.com")----在给定主机名的情况下确定主机的IP地址 ...
- 微信小程序入门(一)
想必当你对官方文档了解地差不多的时候,一颗跃跃欲试的心就开始骚动了吧. 开发小程序之前的准备工作: 1).准备一个域名 2).准备一台云服务器 3).搭建小程序的后台,博主的小程序后台请求的的是自己写 ...
- Linux修改date
与cn校时 ntpdate cn.pool.ntp.org 设置时区 TZ='Asia/Shanghai'; export TZ 刷新生效 source ~/.bashrc vi /etc/profi ...
- 六:在线工具网站,让你PC上要装的软件少一半!
记住这几个在线工具网站,让你PC上要装的软件少一半! 一.uzer.me——丰富的云端应用聚合 这个云平台将我们常用的Office系列软件.Adobe家族的系列软件……乃至CAD制图都整合在了云端,随 ...
- codefoces384A-Mafia心得
题目描述:One day n friends gathered together to play "Mafia". During each round of the game so ...
- Linux命令学习备忘
格式: 命令:原理:实践及截图 1.su <user> 执行该命令,需要输入password,它是<user>中定义的用户的password,即,要变换成的用户的passw ...
- ORA-01745: 无效的主机/绑定变量名 ORA-00917: 缺失的逗号 oracle日期格式错误
今天在oracle中执行插入语句的时候报了一个奇怪的错误,在程序中报的错误是ORA-01745: 无效的主机/绑定变量名,网上一查说是缺失逗号,在查询分析器执行的时候报缺失的逗号,仔细看了一下也没有缺 ...
- 2017-11-22 Intall Ubuntu Log
重启之后进入不了系统,安装工具check defect也不好用(问题尚不清楚),决定重做系统 直接用u盘(Universal_USB_Installer制作的安装工具,之前用都没有问题)安装,前面一起 ...