【问题标题】:iOS 11 UITableView bugiOS 11 UITableView 错误
【发布时间】:2018-02-23 16:47:47
【问题描述】:

可以使用 repo here 重现该错误。

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

许多奇怪的效果发生在我的 iOS 10 分支上:

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

在 Apple 开发者论坛 here 上还有一张似乎相关的票。

我试过没有成功

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

我正在尝试找出可能导致此问题的 iOS 11 中发生更改的行为。

任何帮助将不胜感激!

edit:裁剪到边界有帮助(但最终,它隐藏/裁剪了问题)。我还有一些问题(2、3 和 4)。 当我尝试打开一个单元格时,它会传送回顶部而不是顺利进行。 当我打开一个单元格并想要平滑地滚动到它时,它会传送到顶部然后只滚动到它。 (必须添加一个额外的部分来显示)。

这里是该问题的视频(使用 iPhone 7 Plus、iOS 11、Xcode 9 Golden Master):https://youtu.be/XfxcmmPdeoU

【问题讨论】:

  • 这个问题对于 SO 来说太宽泛了。请把你的问题集中在一个单一的、具体的、明确的问题上。将相关代码发布到您问题中的某个特定问题(而不是指向整个项目的链接)。清楚地解释一个具体问题。
  • 我在 iOS 11 模拟器中尝试过,除了你可能想要选择不同的方法来折叠单元格之外,我没有看到任何奇怪的地方,因为现在它们没有被剪裁..
  • @MilanNosáľ 是的,我忘了剪辑到边界,它帮助我解决了一个问题。谢谢你。你有传送细胞的问题吗?您可以通过打开 3 个单元格,滚动到底部,然后关闭最后一个单元格来复制。
  • 不,不会发生在我身上..你是在设备上还是模拟器上?什么尺寸?我要去跑步了,等我回来再看看吧
  • @MilanNosáľ 我正在使用结合 XCode Golden Master 的 iOS 8 Plus 模拟器

标签: ios swift uitableview ios11


【解决方案1】:

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

我看到你的单元格很好,因为你在heightForRow 中返回UITableViewAutomaticDimension。但是,对于您的部分页眉和页脚,您没有使用自动调整大小。我会尝试通过将estimatedSectionHeaderHeightestimatedSectionFooterHeight 设置为0 来禁用页眉/页脚中的所有自动调整大小的行为。

来源:iOS 11 Floating TableView Header

【讨论】:

    【解决方案2】:

    假设您的 IBOutlets 和变量在 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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 2014-02-23
      • 1970-01-01
      • 2020-03-26
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多