У меня есть UITableView
с переменным количеством разделов. Каждый раздел имеет переменное количество ячеек, а каждый раздел имеет верхний и нижний колонтитулы. У моего UITableView
также есть tableFooterView
, который я хочу всегда держать в нижней части экрана, за исключением случаев, когда таблица слишком велика для размещения на экране, тогда tableFooterView
должен отображаться под последним разделом. , То, что я хочу достичь, показано здесь:
Пример того, что я хочу, сценарий 1
Пример того, что я хочу, сценарий 2
Однако, в настоящее время tableFooterView
всегда находится прямо под последним разделом, поэтому, когда есть, например, только два раздела, это выглядит так:
Пример того, что у меня сейчас есть
Я ищу способ держать его всегда внизу, в каждом возможном сценарии. Я искал вокруг и потому что Apple не поддерживает AutoLayout для tableFooterView
, я еще не нашел решения. Аналогичные случаи заменяют tableFooterView
на sectionFooter
в последнем разделе, но я не могу этого сделать, поскольку у меня уже есть sectionFooters
.
Есть ли кто-нибудь, кто может помочь мне или указать мне правильное направление? Несколько вещей для рассмотрения:
- Это должно быть
tableFooterView
;
- Пользователи могут добавлять разделы к
UITableView
и строки к разделам, поэтому tableFooterView должен обновить свое местоположение
Как настроить tableFooterView
на данный момент:
class CustomView: UITableViewDelegate, UITableViewDataSource {
var myTableFooter: UIView = {
let myTableFooter = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
myTableFooter.backgroundColor = .red
myTableFooter.isUserInteractionEnabled = true
return myTableFooter
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
MyTableView.tableFooterView = myTableFooter
}
}
РЕДАКТИРОВАТЬ: Попробовал метод scrollViewDidScroll
, как предложено, но не работал:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if(scrollView == myTableView) {
let neededHeight = myTableView.frame.height - 50 - view.safeAreaInsets.bottom
let currentHeight = myTableView.contentSize.height - 50
let heightDifference = neededHeight - currentHeight
if(heightDifference > 0) {
myTableView.tableFooterView?.transform = CGAffineTransform(translationX: 0, y: heightDifference)
}
}
}