iOS 11的UITableView错误

这个bug可以在这里用repo来重现。

我有一个奇怪的错误,影响我在我的UITableView中的iOS 11的项目。 有问题的TableView被分组,有可扩展的单元格。

我的iOS 10分支上没有出现许多奇怪的效果:

  1. 标题叠加
  2. 当内容大小高于UITableView容器大小时,发生单元崩溃时出现奇怪的传送问题
  3. 当内容大小超过容器的大小时,在滚动开始时奇怪的传送到tableview顶部
  4. 细胞大小是错误的(经常)

这里还有一张在Apple Developers论坛上相关的票。

我尝试没有任何成功

if #available(iOS 11.0, *) { tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.never } 

我试图find在iOS 11中可能导致此问题的行为。

任何帮助,将不胜感激!

编辑:剪切到界限帮助(但最终,它隐藏/剪辑的问题)。 我还有一些问题(2,3和4)。 当我尝试拆开一个单元时,它将传送回顶部,而不是顺利进行。 当我打开一个单元格并想顺利地滚动到它时,它传送到顶部,然后只滚动到它。 (不得不添加一个额外的部分来显示)。

这是一个问题的video(使用iPhone 7 Plus,iOS 11,Xcode 9 Golden Master): https : //youtu.be/XfxcmmPdeoU

在这里输入图像说明

在iOS 11中,所有估计的UITableView属性( estimatedRowHeightestimatedSectionHeaderHeightestimatedSectionFooterHeight )默认为UITableViewAutomaticDimension

我发现你的单元格在你返回heightForRow UITableViewAutomaticDimension问题。 对于您的部分页眉和页脚,但是您没有使用自动resize。 我会尝试通过设置estimatedSectionHeaderHeightestimatedSectionFooterHeight0来禁用您的页眉/页脚中的所有自动resize的行为。

来源: iOS 11浮动TableView标头

试试这个workarround,假设你的IBOutlets和variables不是在StandardHeaderView.swift中的私有:

  func toggleSection(section: SectionType) { self.sectionsOpened[section] = !self.sectionsOpened[section]! let sectionIndex = self.sections.index(of: section)! let indexPath = IndexPath(row: 0, section: sectionIndex) UIView.animate(withDuration: 0.25) { self.tableView.reloadRows(at: [indexPath], with: .automatic) if let headerView = self.tableView.headerView(forSection: sectionIndex) as? StandardHeaderView { headerView.configWith(title: headerView.headerTitleLabel.text!, isOpen: self.sectionsOpened[section]!, selector: headerView.selector) } self.tableView.scrollToRow(at: IndexPath(row: 0, section: sectionIndex), at: .top, animated: true) } }