Увеличьте высоту табличного представления на основе содержимого в представлении прокрутки - PullRequest
0 голосов
/ 06 марта 2019

Привет, я хочу динамически увеличивать высоту просмотра таблицы при просмотре прокрутки.Я попробую следующий код, даже если он не работает

Здесь элементы массива данных tableview

override func viewDidLoad() {
    super.viewDidLoad()
    rewardPointsApi()
    if(items != nil) {
        self.tableviewheight.constant = CGFloat(70*items.count)
    }
    tableviewheight.constant = tableview.contentSize.height
}

Ответы [ 3 ]

1 голос
/ 07 марта 2019

Иногда установка константы с размером содержимого tableview не будет корректно обновлять высоту, потому что tableview перезагружается или вычисляется самостоятельно

Что будет лучшим местом?

Если у вас есть статические данные, то, вероятно, viewDidAppear - лучшее место

 override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.view.layoutIfNeeded()
        self.heightConstraint.constant = self.tableView.contentSize.height
        self.view.layoutIfNeeded()

  }

Если ваши данные динамические, как вызов API. Затем внутри блока ответа внутри главной очереди.

DispatchQueue.main.async {
        self.tableView.reloadData()
        self.view.layoutIfNeeded()
        self.heightConstraint.constant = self.tableView.contentSize.height 
        self.view.layoutIfNeeded()
 }

ВАЖНО : Коэффициент, который имеет непосредственное отношение к размеру контента, равен estimateRowHeight Так что, если вы уверены в высоте вашей ячейки, то вы напрямую применяете в случае статического числа строк

Надеюсь, это поможет вам и кому-то еще, кто сталкивается с той же проблемой

0 голосов
/ 07 марта 2019

Используйте следующий код после получения ответа от API , сначала назначьте данные массиву элементов, затем перезагрузите представление таблицы и установите ограничение высоты UItableview и отключите самопрокрутку табличного представления, см. Код ниже.

if(items != nil)
{
     DispatchQueue.main.async {
         tableView.reloadData()
         tableviewheight.constant = tableview.contentSize.height
         tableView.isScrollEnabled = false
         self.view.layoutIfNeeded()
     }
 }
0 голосов
/ 07 марта 2019

В настоящее время вы пишете над строкой сразу после rewardPointsApi() ваша логика будет работать, если вы ожидаете ответа на этот метод, если его асинхронный запрос не будет работать, ваш код. Вам нужно добавить следующую строку в ответ rewardPointsApi() сразу после перезагрузки данных в tableView.

        tableviewheight.constant = tableview.contentSize.height
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...