iOS11 SectionHeader 胡乱移动且滑动时出现重复内容的解决方法

升级到iOS 11后,痛苦的事情多起来了,以前版本没有的出现问题的代码,经过Xcode 9一编译,千万草泥马奔腾而过;

今天碰到一个奇葩问题,直接进入主题:

问题描述:

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
  return 12;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
  UIView* headerSection_V = [[UIView alloc]initWithFrame:CGRectMake(ZERODIS, ZERODIS, SCREEN_WIDTH, 12)];
  [headerSection_V setBackgroundColor:COLOR_3];
  return headerSection_V;
}

1-   headerView 会错乱移动, 且调整tableView 的style也没有效果;

2- 滑动tableView的时候, 貌似底部又多出一个图层tableView,重复了tableViewCell的内容;

3-  以下代码无效:(当然tableVIew 懒加载的时候 还有相应代码设置cell分割线的偏移)

/**
 * 解决cell分割线距离两边12 居中对齐
 */
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
  if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
    [cell setSeparatorInset:UIEdgeInsetsMake(ZERODIS, 12, ZERODIS, 12)];
  }
  if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
    [cell setLayoutMargins:UIEdgeInsetsMake(ZERODIS, 12, ZERODIS, 12)];
  }
}

最后排查发现:

旧代码使用了xib但是又没有用xib的tableView,  tableView又是自己代码生成的, 把xib删除之后,就OK了;

PS:下面通过实例代码给大家分享UITableView SectionHeader 自定义section的头部。

具体代码如下所示:

//自定义section的头部
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
  UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(10, 0, 300, 30)];//创建一个视图
  UIImageView *headerImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 0, 300, 30)];
  UIImage *image = [UIImage imageNamed:@"4-2.png"];
  [headerImageView setImage:image];
  [headerView addSubview:headerImageView];
  [headerImageView release];
  NSString *createTime = [self.keysArray objectAtIndex:section];
  createTime = [createTime stringByReplacingCharactersInRange:NSMakeRange(4, 1) withString:@"-"];
  createTime = [createTime stringByReplacingCharactersInRange:NSMakeRange(7, 1) withString:@"-"];
  UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(130, 5, 150, 20)];
  headerLabel.backgroundColor = [UIColor clearColor];
  headerLabel.font = [UIFont boldSystemFontOfSize:15.0];
  headerLabel.textColor = [UIColor blueColor];
  headerLabel.text = createTime;
  [headerView addSubview:headerLabel];
  [headerLabel release];
  return headerView;
}

总结

以上所述是小编给大家介绍的iOS11 SectionHeader 胡乱移动且滑动时出现重复内容的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

时间: 2017-11-05

浅谈Xcode9 和iOS11适配和特性

今天升级了Xcode9 刚才写了一篇 爱劈叉的齐刘海 现在说说新的东西把,有些简直不能再恶心了但有些简直不能再贴心 首先是跳转, 之前按住Command + 左键 就可以跳转了;然而今天我发现 除了这个: Jump to Definition(^⌘):跳转类头文件或定义 Show Quick Help(⌥):显示帮助文档 Edit All in Scope:编辑文档内所有匹配内容 在这里我要说,对于懒得不行的我,简直要吐,多了一步操作 效率降低很多的好吗? 那么好,你试试 Command + 右

详解iOS11、iPhone X、Xcode9 适配指南

更新iOS11后,发现有些地方需要做适配,整理后按照优先级分为以下三类: 单纯升级iOS11后造成的变化: Xcode9 打包后造成的变化: iPhoneX的适配 一.单纯升级iOS11后造成的变化 升级后,发现某个拥有tableView的界面错乱,组间距和contentInset错乱,因为iOS11中 UIViewController 的 automaticallyAdjustsScrollViewInsets 属性被废弃了,因此当tableView超出安全区域时,系统自动会调整SafeAre

iOS11和iPhoneX适配的一些坑

本文转载于:http://www.cocoachina.com/ios/20170921/20623.html 导航栏 导航栏高度的变化 iOS11之前导航栏默认高度为64pt(这里高度指statusBar + NavigationBar),iOS11之后如果设置了prefersLargeTitles = YES则为96pt,默认情况下还是64pt,但在iPhoneX上由于刘海的出现statusBar由以前的20pt变成了44pt,所以iPhoneX上高度变为88pt,如果项目里隐藏了导航栏加了

iOS11 WKWebView内容过滤规则详解

WKWebView中新增了一个功能,可以对WebView的内容添加一些自定义的过滤规则.这个功能原来在 Safari Extension 中被引入,从 11 开始同样适用于WKWebView. 使用方法 原理上就是提供一个 JSON 给 WebKit,这个 JSON 包括内容的触发规则(trigger)和对应的处理方式(action).比如: [{ "trigger": { "url-filter": ".*" }, "action&q

Html 编辑器粘贴内容过滤技术详解

作者:Tony Qu 最近在解决数据粘贴方面取得了不少进展,作为Html在线编辑器所必须具备的技术,在这里详细给大家介绍并提供实现参考.在研究过程中,我也确实走了不少弯路,尝试了n种方式,由于美国的PM始终觉得有些影响用户体验的东西无法接受,导致好几个提案被否定,不过收获还是很丰富的. 我现在写code喜欢需求驱动,让我们来看看这项技术的主要需求 * 能够过滤用户贴进来的纯文本数据 * 能够过滤用户贴进来的html数据(未经Html编码) * 能够过滤用户贴进来的Word数据,并能把大部分Wor

jquery选择器之内容过滤选择器详解

先写出DOM元素的HTML结构: 复制代码 代码如下: <style type="text/css">    /*高亮显示*/    .highlight{               background-color: gray    }</style> 复制代码 代码如下: <div>John Resign</div><div>George Martin</div><div>Malcom John

对nginx-naxsi白名单规则详解

白名单规则语法: BasicRule wl:ID [negative] [mz:[$URL:target_url]|[match_zone]|[$ARGS_VAR:varname]|[$BODY_VARS:varname]|[$HEADERS_VAR:varname]|[NAME]] wl:ID (White List ID) 哪些拦截规则会进入白名单 wl:0 把所有拦截规则加入白名单 wl:42 把ID为42的拦截规则加入白名单 wl:42,41,43 把ID为42, 41和43的拦截规则加

Spring Data JPA 简单查询--方法定义规则(详解)

一.常用规则速查 1 And 并且 2 Or   或 3 Is,Equals 等于 4 Between   两者之间 5 LessThan 小于 6 LessThanEqual   小于等于 7 GreaterThan 大于 8 GreaterThanEqual   大于等于 9 After 之后(时间) > 10 Before 之前(时间) < 11 IsNull 等于Null 12 IsNotNull,NotNull 不等于Null 13 Like 模糊查询.查询件中需要自己加 % 14

Android xUtils更新到3.0后的基本使用规则详解

说实话,对于xUtils,是我最近才用到的开发框架(也是刚接触),对于其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是其最近更新到3.0也没有解决加载自定义ImageView报错的问题. xUtils简介 xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls 最低兼容android 2.2 (api level 8) 我总是喜欢用

layui lay-verify form表单自定义验证规则详解

官方文档详见:https://www.layui.com/doc/modules/form.html#verify 虽然layui的官方文档已经是写的比较详细,但是初次使用的时候总会懵一下,这里纪录一下lay-verify自定义验证规则的时候到底放哪. html: <input type="text" lay-verify="digital" placeholder="请输入数字"> <button type="but

laravel 数据验证规则详解

如下所示: return [ 'accepted' => '必须为yes,on,1,true', 'active_url' => '是否是一个合法的url,基于PHP的checkdnsrr函数,因此也可以用来验证邮箱地址是否存在', 'after:date' => '验证字段必须是给定日期后的值,比如required|date|after:tomorrow,通过PHP函数strtotime来验证', 'after_or_equal:date' => '大于等于', 'alpha'

对vuex中getters计算过滤操作详解

getter这个概念其实我们写的时候感觉好像和Mutations修改状态一样,实际上它们是有区别的: getters比较死板,如果你的百度钱包只有在金额为100才能提现,那么你在写提现页面,它是早已固定好的,而Mutation不一样,当你点击百度钱包提现,你哪怕是一元,它只要你点击了便可以提现,而且getters它是不需要什么点击,它就存在,只要你写了,这是什么意思,就是说假设你百度钱包为0,你存在了getter它就有100元,而你如果写许多百度经验,百度再次发红包0.5元时它就是100+0.5

python flask中动态URL规则详解

URL是可以添加变量部分的, 把类似的部分抽象出来, 比如: @app.route('/example/1/') @app.route('/example/2/') @app.route('/example/3/') def example(id): return 'example:{ }'.format(id) 可以抽象为: @app.route('/example/<id>/') def wxample(id): return 'example:{ }'.format(id) 尖括号中的内