Установка высоты таблицы 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 строк, у вас возникнет проблема с прокруткой, потому что высота этих строк соответствует высоте представления таблицы, здесь высота представления таблицы увеличивается больше, чем высота экрана.
Чтобы решить эту проблему, вы должны использовать представление прокрутки вне таблицы.