web-dev-qa-db-ja.com

iOS 11 UITableViewのバグ

バグは、レポ here を使用して再現できます。

UITableViewでiOS 11のプロジェクトに影響する奇妙なバグがあります。問題のTableViewはグループ化されており、拡張可能なセルがあります。

私のiOS 10ブランチには表示されない、多くの奇妙な効果が発生します。

  1. タイトルが重なる
  2. セルの崩壊が発生したときにコンテンツサイズがUITableViewコンテナサイズを超えると、奇妙なテレポートの問題が発生する
  3. コンテンツサイズがコンテナのサイズを超えた場合、スクロールの開始時にTableviewの上部にテレポートする
  4. セルのサイジングが間違っている(かなり頻繁に)

Apple Developers forum 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/XfxcmmPdeo

enter image description here

18
Swift Rabbit

IOS 11では、すべての推定UITableViewプロパティ(estimatedRowHeightestimatedSectionHeaderHeight、およびestimatedSectionFooterHeight)のデフォルトはUITableViewAutomaticDimensionです。

UITableViewAutomaticDimensionheightForRowを返しているので、あなたのセルでは問題ないことがわかります。ただし、セクションのヘッダーとフッターでは、自動サイズ設定を使用していません。 estimatedSectionHeaderHeightおよびestimatedSectionFooterHeight0に設定して、ヘッダー/フッターのすべての自動サイズ変更動作を無効にしてみます。

ソース: iOS 11フローティングTableViewヘッダー

24
jvdev7

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)
    }
}
0
Patrick Bodet