iOS 11 UITableView 故障

19

这个 bug 可以使用这里的 repo 进行重现:here

iOS 11 中我的 UITableView 项目存在一个奇怪的 bug。
相关的 TableView 是分组的,具有可展开的单元格。

与我的 iOS 10 分支不同,许多奇怪的效果会发生:

  1. 标题会叠加
  2. 当单元格折叠时,内容大小超过 UITableView 容器大小时会出现奇怪的瞬移问题
  3. 当内容大小超过容器大小时,在滚动开始时会出现奇怪的瞬移到表视图顶部
  4. 单元格大小错误(很常见)

Apple Developer 论坛上也有一个相关的帖子:here

我已经尝试了,但没有成功:

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

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

任何帮助将不胜感激!

编辑:剪裁边界有所帮助(但最终隐藏/剪裁了问题)。 我仍然有一些问题(2,3和4)。 当我尝试解除包装单元格时,它会立即传送回顶部而不是平稳移动。 当我解除包装一个单元格并想要平稳地滚动到它时,它会立即传送到顶部,然后才滚动到它。(必须添加一个额外的部分进行显示)。

这里有一个视频显示问题(使用iPhone 7 Plus,iOS 11,Xcode 9 Golden Master):https://youtu.be/XfxcmmPdeoU

输入图像描述


1
这个问题对于SO来说太过宽泛。请将您的问题集中到一个单一、具体、清晰的问题上。在您的问题中发布与该特定问题相关的代码(而不是整个项目的链接)。清楚地解释这个特定的问题。 - rmaddy
我在 iOS 11 模拟器上尝试了一下,除了你可能想选择不同的方法来折叠单元格外,我并没有发现任何异常。因为现在它们没有被裁剪。 - Milan Nosáľ
不,这种情况对我来说没有发生。你是在设备上还是模拟器上?是哪个尺寸?我要去跑步了,回来后会更深入地研究它。 - Milan Nosáľ
@MilanNosáľ 我正在使用iOS 8 Plus模拟器和XCode Golden Master。 - Swift Rabbit
我在自己的项目中也遇到了类似的问题。将预估高度设置为零似乎可以解决问题,但是这样会导致所有自动布局高度计算失效... - vib
显示剩余2条评论
2个回答

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

我看到对于你的单元格来说,如果在heightForRow中返回UITableViewAutomaticDimension,那么这很好。但是对于你的节标题和页脚,你没有利用自动调整大小的功能。我建议通过将estimatedSectionHeaderHeightestimatedSectionFooterHeight设置为0来禁用头部/底部视图的自动调整大小行为。

来源:iOS 11 Floating TableView Header


0

尝试使用此解决方法,假设您在StandardHeaderView.swift中使用的IBOutlets和变量不是私有的:

    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)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接