バグは、レポ here を使用して再現できます。
UITableViewでiOS 11のプロジェクトに影響する奇妙なバグがあります。問題のTableViewはグループ化されており、拡張可能なセルがあります。
私のiOS 10ブランチには表示されない、多くの奇妙な効果が発生します。
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
IOS 11では、すべての推定UITableView
プロパティ(estimatedRowHeight
、estimatedSectionHeaderHeight
、およびestimatedSectionFooterHeight
)のデフォルトはUITableViewAutomaticDimension
です。
UITableViewAutomaticDimension
でheightForRow
を返しているので、あなたのセルでは問題ないことがわかります。ただし、セクションのヘッダーとフッターでは、自動サイズ設定を使用していません。 estimatedSectionHeaderHeight
およびestimatedSectionFooterHeight
を0
に設定して、ヘッダー/フッターのすべての自動サイズ変更動作を無効にしてみます。
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)
}
}