ich einen kurzen Blick auf das über dem Mittagessen genommen haben. Ich dachte ursprünglich, dass dies durch Überschreiben von ScrollViewDidScroll geschehen könnte, aber ich konnte es nicht auf diese Weise lösen. Die Antwort, die ich gefunden habe, ist, dynamisch zu entscheiden, ob die Tabelle eine Fußzeilenansicht anzeigen soll oder nicht.
In dem folgenden Code (der grob ist, aber sollte Ihnen die Idee), testen wir, ob die Anzahl der Zeilen der Tabelle größer ist als die Menge, die wir auf dem Bildschirm haben möchten (in diesem Fall habe ich dies fest codiert) bis 10). Wenn dies der Fall ist, erstellen wir eine Fußzeile aus dem letzten Element des Quelldatenarrays und legen die Fußzeilenhöhe auf die gleiche Höhe wie die anderen Zellen mit einer anderen Hintergrundfarbe fest. Wenn nicht, dann testen wir cellForItemAtIndexPath verwenden, ob wir in der letzten Zeile der Datasource sind, in diesem Fall werden wir die Zelle entsprechend formatiert werden:
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
}
}
Um dies zu testen, ändern Sie den Bereich der für ... Schleife in viewDidLoad von 0 .. < 5 bis 0 .. < 50. Sie werden sehen, dass das Verhalten dem entspricht, was Sie erreichen wollten.
Hoffe, dass hilft!
Haben Sie über Abschnitt Fußzeile Ansicht denken? nicht die Fußzeile der Tabelle und sie umschließt deine Sektion schön – Tj3n
Wie soll die untere Zelle aussehen? Ist es eine Variation der Standardzelle oder etwas völlig anderes? – Sparky
@Sparky kann beides sein. Es macht mir nichts aus, keine Zelle zu benutzen und vielleicht auch nur einen Blick außerhalb des Tisches oder so. Aber ich brauche es so zu verhalten, wie ich es brauche – WKL