Установка высоты таблицы TableView по количеству или строкам

У меня есть TableView в MainstoryBoard, и количество строк является случайным каждый раз. Я хочу, чтобы высота целого TableView была гибкой - я имею в виду, например: если я получил 4 строки в TableView, а каждая высота строки TableView равна 22, поэтому высота TableView будет равна 88, Другой пример: количество строк: 2 высота строки = 22 TableView будет 44.

Как я могу это сделать?

Ответ 1

Вы можете изменить высоту UITableView согласно contentSize, как показано ниже:

Swift 2.2

tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y, tableView.frame.size.width, tableView.contentSize.height)

Свифт 3 или 4+

tableView.frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)

и убедитесь, что вы пишете вышеуказанную строку в методе viewDidAppear

Вам также необходимо написать вышеуказанную строку в viewDidLayoutSubviews.

Swift 2.2

func viewDidLayoutSubviews(){
     tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y, tableView.frame.size.width, tableView.contentSize.height)
     tableView.reloadData()
}

Свифт 3 или 4+

func viewDidLayoutSubviews(){
     tableView.frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)
     tableView.reloadData()
}

Ответ 2

Возьмите выходное ограничение высоты родительского представления и назначьте ему высоту содержимого таблицы + константу (дополнительная высота другого содержимого в представлении)

heightConstraintView.constant = tableView.contentSize.height + constantValue //use the value of constant as required.

и напишите этот код в методе cellForRowAt.

Ответ 3

DispatchQueue.main.async {
    var frame = tableView.frame
    frame.size.height = tableView.contentSize.height
    tableView.frame = frame
}

ИЛИ ЖЕ

DispatchQueue.main.async {
    self.TblViewHeightConstraint.constant = CGFloat((self.array.count) * 30)//Here 30 is my cell height
    self.TblView.reloadData()
}

Ответ 4

Используйте это для Swift 3

 override func viewDidLayoutSubviews(){
    tableView.frame = CGRect(x: tableView.frame.origin.x, y:  tableView.frame.origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)
    tableView.reloadData()
}

Ответ 5

Для использования с autolayout:

Где-то в viewDidLoad()

tableView.anchor(top: view.topAnchor, leading: view.leadingAnchor, bottom: nil, trailing: view.trailingAnchor)

а затем в вашем viewDidLayoutSubViews()

tableView.heightAnchor.constraint(equalToConstant: tableView.contentSize.height).isActive = true

Ответ 6

Примечание: когда вы увеличиваете высоту таблицы, она выходит за пределы области просмотра. и у вас возникнут проблемы с прокруткой.

Пример: возьмите вид изнутри, сохраняющий вид таблицы, и задайте ограничения слева, справа, снизу, сверху до нуля (0).

Теперь перезагрузите табличное представление. Предположим, что 2 строки каждая высота строки равна 20, теперь общая высота строк равна 40. Это нормально, и они дали эту высоту табличному представлению. В табличном представлении будет отображаться только 40 высот (вы можете назначить высоту табличного представления, взяв ограничения (или) табличного представления. оба размера содержимого имеют одинаковую высоту в соответствии с высотой строк).

Но если вы перезагрузите 50 строк, у вас возникнет проблема с прокруткой, потому что высота этих строк соответствует высоте представления таблицы, здесь высота представления таблицы увеличивается больше, чем высота экрана.

Чтобы решить эту проблему, вы должны использовать представление прокрутки вне таблицы.