Смещение табличного представления изменено после перезагрузки данных - PullRequest
2 голосов
/ 20 июня 2019

Смещение табличного представления изменено после перезагрузки данных.

1 Динамическая высота строки с использованием автоматического макета.

2 Использование панели навигации и панели вкладок в UIViewController.

3 Использование 2заголовок в tableivew (Мой 1-й и 2-й заголовок является статическим для всех динамических строк в первом разделе.)

Пожалуйста, проверьте Log

Первая загрузка таблицы просмотра

previousContentHeight -> 291.0 -- previousContentOffset -> 0.0

afterReloadDataContentHeight -> 3788.5 -- afterReloadDataContentOffset -> 0.0

Новые данные поступили с сервера и перезагрузили данные

previousContentHeight -> 3788.5 -- previousContentOffset -> 3063.5

afterReloadDataContentHeight -> 1719.0 -- afterReloadDataContentOffset -> 580.5

Вот функция перезагрузки данных

func prepareReloadData() {
    let previousContentHeight = tblView.contentSize.height
    let previousContentOffset = tblView.contentOffset.y
    print("previousContentHeight -> \(previousContentHeight) -- previousContentOffset -> \(previousContentOffset)")
    tblView.reloadData()
    tblView.layoutIfNeeded()
    print("afterReloadDataContentHeight -> \(self.tblView.contentSize.height) -- afterReloadDataContentOffset -> \(self.tblView.contentOffset.y)")
}

1 Ответ

0 голосов
/ 20 июня 2019

После большого количества времени, потраченного на поиск решения этой проблемы

@ Игорь ответ в этом случае работает нормально

Здесь вы можете проверить оригиналответ @ Игорь

Swift-5

// declaration & initialization  
var cellHeights: [IndexPath : CGFloat] = [:]

UITableViewDelegate

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    cellHeights[indexPath] = cell.frame.size.height
}

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return cellHeights[indexPath] ?? UITableView.automaticDimension // Here you can set specific height like 70 or your cell height instead of automaticDimension, But My suggestion is set automaticDimension
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...