Прокрутка в UITableView не занимает правильное положение

#swift #uitableview #scrolltorow

#быстрый #uitableview #прокрутка

Вопрос:

У меня странная проблема, когда scrollToRow UITableView я не занимаю правильную позицию.

У меня есть UITableView, где у меня есть разделы и строки. В разделах я показываю категории, а в строках я показываю товары для этих категорий. laundryCategoriesList есть список категорий, и для каждой категории у меня есть список продуктов в виде списка вложенных массивов внутри модели категорий.

Ниже приведен код, который у меня есть.

 laundryItemsTV.sectionHeaderHeight = UITableView.automaticDimension laundryItemsTV.estimatedSectionHeaderHeight = screenHeight   laundryItemsTV.rowHeight = UITableView.automaticDimension laundryItemsTV.estimatedRowHeight = screenHeight   func numberOfSections(in tableView: UITableView) -gt; Int {  return laundryCategoriesList.count }  func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -gt; UIView? {    let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: laundryCategoryHeader) as! LaundryCategoryHeader  headerView.setUpView(categoryObject: laundryCategoriesList[section])  headerView.setNeedsLayout()  headerView.layoutIfNeeded()   return headerView   }  func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -gt; CGFloat {  return screenHeight }  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -gt; Int {  return laundryCategoriesList[section].products.count }  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -gt; UITableViewCell {    guard let cell = tableView.dequeueReusableCell(withIdentifier: laundryProductCell, for: indexPath) as? LaundryProductCell else {  return UITableViewCell()  }  cell.setUpView(productObject: laundryCategoriesList[indexPath.section].products[indexPath.row])   cell.setNeedsLayout()  cell.layoutIfNeeded()   cell.selectionStyle = .none  cell.backgroundColor = .clear  cell.contentView.backgroundColor = .clear   return cell   }  

Над таблицей у меня есть UICollectionView UITableView представление, в котором я показываю категории, используя тот же список массивов laundryCategoriesList . При нажатии на эту категорию мне просто нужно указать конкретный раздел в этом UITableView .

Итак, ниже приведен код, который у меня есть, когда я нажимаю на UICollectionView .

 self.laundryItemsTV.scrollToRow(at: IndexPath(row: 0, section: indexPath.row), at: .top, animated: true)  

Теперь проблема в том, что, когда я нажимаю на категорию, прокрутка не происходит точно в разделе просмотра таблицы. Он идет вверх-вниз. Однако, если я прокручу весь UITableView один раз, а затем выполню события щелчка в представлении коллекции категорий, все будет работать нормально.

Обратите внимание, что contentInset у меня есть представление таблицы, как показано ниже (просто для отображения горизонтального списка категорий).

 self.laundryItemsTV.contentInset = UIEdgeInsets(top: self.mainHeightForTopViews, left: 0, bottom: 0, right: 0)  

Я также поместил событие щелчка UICollectionView внутри DispatchQueue.main.asyncAfter(deadline: .now() 0.1) { , но все равно прокрутка не в порядке.

Также обратите UITableView внимание, что тип Grouped

Есть идеи, чего мне здесь не хватает или я делаю что-то не так?

Комментарии:

1. Я бы сказал, что проблема в том, что ваш UITableView рассчитал размеры макета. Поэтому при прокрутке он пытается прокрутить его, но при расчете макета это неправильное положение. Если бы вы могли избежать слишком большого количества автоматических размеров, это было бы здорово. Для того, чтобы вместо заголовка был один? Разве это не «исправить»? Если вы используете фиксированную высоту (для заголовка и ячеек), это должно сработать, например. Просто попробуйте для тестирования.