2016-05-05 10 views
0

Ich habe ein UITableView, das dieses Beispielwörterbuch auffüllt.UITableView-Zeilen, die unter UITableViewHeaderSection gleiten

var WholeDict = [ 
    "Animals" : ["Cat","Dog"], 
    "Fruits" : ["Apple","Orange"] 
] 

Der Inhalt ist zu klein. Daher wähle ich den gruppierten UITableView-Stil, damit ich die unerwünschten Zellen vermeiden kann, die unter dem Inhalt in UITableView angezeigt werden. Aber das Problem ist, wenn ich gruppierten Stil wähle, die Zellen unter den einzelnen Sektionen nicht unter den Kopf gehen beim Scrollen. Beim Scrollen wird der Header zuerst verschoben. Grouped style: cells scrolling along with header & Plain style: cells sliding under header. Dies ist, was ich in Code tue

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    let allkeys = Array(WholeDict.keys) 
    return allkeys[section] 
} 

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { 
    if let headerView = view as? UITableViewHeaderFooterView { 
     headerView.textLabel?.textAlignment = .Center 
    } 
} 

So wie kann ich die zusätzlichen Räume unterhalb der Tableview vermeiden und zugleich das Gleiten der Zeilen unter Header verwenden?

BEARBEITEN Ich benutze Walters beantworten. Es funktioniert für mich. Aber dann hatte ich ein anderes Problem. Wenn ich über die letzte Zeile scrolle, zeigt der Bildschirm nur die Fußzeile an, die ich hinzugefügt habe. Also habe ich einen weiteren Workaround hinzugefügt.

func scrollViewDidEndDecelerating(scrollView: UIScrollView) { 
    let visiblerows = MyTable.indexPathsForVisibleRows 
    if visiblerows?.count == 0 { 
     let ScrollToIndexPath = NSIndexPath(forRow: 0, inSection: WholeDict.count - 1) 
     MyTable.scrollToRowAtIndexPath(ScrollToIndexPath, atScrollPosition: UITableViewScrollPosition.Top, animated: true) 
    } 
} 
+0

Eine andere Lösung könnte sein, die Trennlinien aus der Tabelle Ansicht ('' separatorStyle' oder separatorColor') zu entfernen und sie dann manuell für jede Zelle ziehen in Ihrem 'cellForRowAtIndexPath'. Das würde das Fußzeilenproblem vermeiden. – Walter

Antwort

1

Die UITableView fügt immer leere "Zellen" hinzu, um den Speicherplatz auszufüllen. Um sie verschwinden zu lassen, sollten Sie eine Fußzeile erstellen, die den Abstand zwischen dem Ende der letzten aufgefüllten Zeile und dem Ende der Tabellenansicht ausfüllt. Hier ist ein schnelles Beispiel, aber Sie müssen es möglicherweise verschieben, abhängig davon, wie Sie Zellen hinzufügen. Die Eigenschaft contentSize der TabelleView hat eine Höhe, die dem aufgefüllten Teil der tableView entspricht.

let contentSize = self.tableView.contentSize 
let footer = UIView(frame: CGRect(x: self.tableView.frame.origin.x, 
            y: self.tableView.frame.origin.y + contentSize.height, 
           width: self.tableView.frame.size.width, 
           height: self.tableView.frame.height - self.tableView.contentSize.height)) 

    self.tableView.tableFooterView = footer 
+0

Danke. Es funktioniert. Und ich hatte meine Frage mit meinem Workaround bearbeitet. Bitte überprüfe das auch. – iOSMAn

+0

Wenn Sie Storyboards verwenden, können Sie auch eine uiview unterhalb der Tabellenansicht ziehen, um die Fußzeilenansicht hinzuzufügen. –

+0

Die Fußzeilenansicht muss keine bestimmte Höhe haben (sie könnte auch 0 sein). Einfach nur - leere Zellen sind weg. –

0

Wenn Sie Ihre Abschnittsüberschriften fixieren möchten, können Sie diese Eigenschaft verwenden.

self.tableView.style = UITableViewStyleGrouped 

Es macht Ihre Sektionen Header an den Zeilen zu bleiben und mit ihnen scrollen.

+0

Ich möchte nicht, dass meine Abschnittsüberschriften repariert werden. Die Verwendung von gruppiertem Stil entfernt jedoch die unerwünschten Zeilen. Ich möchte das zusammen mit den "Reihen, die unter Abschnittsüberschrift" des einfachen Stils gleiten. – iOSMAn