Я взял быстрый взгляд на это за обедом. Я изначально, хотя это можно было сделать, переопределив ScrollViewDidScroll, но не смог его обработать. Ответ, который я придумал, заключается в том, чтобы динамически решать, должна ли таблица отображать представление нижнего колонтитула или нет.
В следующем коде (который является грубым, но должен дать вам эту идею) мы проверяем, больше ли количество строк таблицы, чем количество, которое мы хотим иметь на экране (в этом случае я жестко запрограммировал это до 10). Если это так, мы создаем нижний колонтитул из последнего элемента массива исходных данных и устанавливаем высоту нижнего колонтитула на ту же высоту, что и другие ячейки, с другим цветом фона. Если нет, то мы используем cellForItemAtIndexPath, чтобы проверить, есть ли у нас в последнем ряду DataSource, в этом случае мы форматировать ячейки соответственно:
import UIKit
class ViewController: UIViewController {
var myTrackingTableViewController : TrackingTableViewController!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let sourceData : [String] = {
var sD : [String] = [String]()
for count in 0..<50 { // Use the top end of this loop to configure the number of rows in the tableview
sD.append("Number \(count)")
}
return sD
}()
myTrackingTableViewController = TrackingTableViewController(sourceData: sourceData, numberOfRowsOnScreen: 10, style: UITableViewStyle.plain)
self.view.addSubview(myTrackingTableViewController.tableView)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
class TrackingTableViewController : UITableViewController {
let sourceData : [String]
var footerText : String!
var footerInline : Bool = false
init(sourceData: [String], numberOfRowsOnScreen: Int, style: UITableViewStyle) {
self.sourceData = sourceData
super.init(style: style)
if self.sourceData.count > numberOfRowsOnScreen {
self.footerText = sourceData.last
}
else
{
footerInline = true
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if footerInline {
return sourceData.count
}
return sourceData.count - 1
}
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
if footerText != nil {
return self.tableView.frame.height/10
}
return 0
}
override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
if footerText != nil {
let cell = UITableViewCell()
cell.frame = CGRect(origin: CGPoint(x: 0, y: self.tableView.frame.height - self.tableView.rowHeight), size: CGSize(width: self.tableView.frame.width, height: self.tableView.frame.height/CGFloat(10)))
cell.backgroundColor = UIColor.red
let textLabel = UILabel(frame: CGRect(origin: CGPoint.zero, size: cell.frame.size))
textLabel.text = footerText
cell.addSubview(textLabel)
return cell
}
return nil
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return self.tableView.frame.height/10
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") ?? UITableViewCell()
// Clean
for subview in cell.subviews {
subview.removeFromSuperview()
}
// Configure
if indexPath.row == sourceData.count - 1 && footerInline {
cell.backgroundColor = UIColor.red
}
else
{
cell.backgroundColor = UIColor.blue
}
let textLabel = UILabel(frame: CGRect(origin: CGPoint.zero, size: cell.frame.size))
textLabel.text = sourceData[indexPath.row]
cell.addSubview(textLabel)
return cell
}
}
Чтобы проверить это, изменить диапазон действия для ... петли in viewDidLoad от 0 .. < от 5 до 0 .. < 50. Вы увидите, что поведение соответствует тому, чего вы хотели достичь.
Надеюсь, что это поможет!
Вы думаете о разделе нижнего колонтитула? а не в виде нижнего колонтитула стола, и он отлично украсит ваш раздел. – Tj3n
Что вы хотите, чтобы нижняя ячейка выглядела? Это вариация стандартной ячейки или что-то совершенно другое? – Sparky
@Sparky это может быть как. Я не возражаю против использования ячейки и, возможно, просто uiview за пределами таблицы или чего-то еще. Но мне нужно, чтобы он вел себя так, как мне это нужно. – WKL