iOS11 -- 关于点击sectionHeader头部展示下拉cell重叠处理

点击sectionHeader头部下拉展示列表内容,点击收起,类似QQ、微信的好友列表。

QQ好友列表.jpeg

在项目也有这种类似的展示点击头部sectionHeader 来展示数据的方式,做法很简单,利用一个属性来标志section是否展开(opend),利用

- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);

来刷新section。我的demo中比较简单,就是一个section中一个cell,所以展开的section中cell数量为1(同理,可以拓展为多个cell)。

在 iOS11之前展示正常,最近项目在适配iOS11,发现了在这个tableView中关于点击sectionHeader头部时候,会出现sectionHeader 重叠的现象。原本为了适配关于tableView的在iOS 11中默认启用Self-Sizing,在每原本代码基础上,初始化返回一个footerView和headerView,在其他的页面没出现问题。

//ios 11
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] init];
}

但在这里需要用户手动更新section的时候,这样就会造成contentSize和contentOffset值的变化,如果是有动画是观察这两个属性的变化进行的,就会造成动画的异常,因为在估算行高机制下,contentSize的值是一点点地变化更新的,所有cell显示完后才是最终的contentSize值。因为不会缓存正确的行高,tableView reloadData的时候,会重新计算contentSize,就有可能会引起contentOffset的变化。


重叠.jpeg

所以为了维护原本的效果,这里采取的是关闭Self - Sizing

self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
正常.jpeg

参考:

你可能需要为你的APP适配iOS11

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆、动态的新风格。 本文介绍iOS11中在UI方面做了哪...
    阿凡提说AI阅读 604评论 0 1
  • 前言 苹果WWDC开发者大会上,终于发布了大家期待已久的iOS 11,有些新特性功能确实出人意料。不过大的方面苹果...
    Mr_Say_Yes阅读 3,365评论 6 15
  • 作者:zombieEngineer链接:http://www.jianshu.com/p/ef423efd5650...
    KingLionsFrank阅读 749评论 2 1
  • 本文为作者原创,未经作者允许不得转载。该文同时发表在腾讯bugly公众号:https://mp.weixin.qq...
    sonialiu阅读 101,676评论 74 283
  • 最近迷上了这个小孩儿 我想到了一件事,应该把之前所有写过的博客全列个表。有的才写过三条吧。自恋和恋爱是我写东西的两...
    fe33be1aa229阅读 270评论 0 0