iOS 11的UITableView错误
这个bug可以在这里用repo来重现。
我有一个奇怪的错误,影响我在我的UITableView中的iOS 11的项目。 有问题的TableView被分组,有可扩展的单元格。
我的iOS 10分支上没有出现许多奇怪的效果:
- 标题叠加
- 当内容大小高于UITableView容器大小时,发生单元崩溃时出现奇怪的传送问题
- 当内容大小超过容器的大小时,在滚动开始时奇怪的传送到tableview顶部
- 细胞大小是错误的(经常)
这里还有一张在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
属性( estimatedRowHeight
, estimatedSectionHeaderHeight
和estimatedSectionFooterHeight
)默认为UITableViewAutomaticDimension
。
我发现你的单元格在你返回heightForRow
UITableViewAutomaticDimension
问题。 对于您的部分页眉和页脚,但是您没有使用自动resize。 我会尝试通过设置estimatedSectionHeaderHeight
和estimatedSectionFooterHeight
为0
来禁用您的页眉/页脚中的所有自动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) } }