美文网首页iOS
iOS11 -- 关于点击sectionHeader头部展示下拉

iOS11 -- 关于点击sectionHeader头部展示下拉

作者: 崠崠 | 来源:发表于2017-09-27 23:29 被阅读249次

    点击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

    相关文章

      网友评论

        本文标题:iOS11 -- 关于点击sectionHeader头部展示下拉

        本文链接:https://www.haomeiwen.com/subject/xtupextx.html