2012-07-15 10 views
6

Ich habe eine UITableView mit 3 Abschnitten. Jeder von ihnen hat eine Fußzeile, die ich mit viewForFooterInSection hinzugefügt habe. Das Problem, das ich habe, ist, dass, wenn ich die Tabellenansicht scrollen, der Footer an den unteren Rand des Bildschirms klebt und nicht wie der Rest der Zellen scrollt. Kann jemand es so machen, dass die Fußzeile fast wie eine Zelle wirkt und mit dem Rest des Tisches scrollt? Vielen Dank!iOS - viewForFooterInSection kleben an der Unterseite von UITableView

Antwort

10

Ich habe es tatsächlich herausgefunden. Wahrscheinlich ist das nicht die klügste Art, es zu tun, aber ich änderte meinen UITableView-Stil zu gruppiert, und das reparierte es. Ich musste das TableView ein wenig anpassen, so dass die Zellen genauso aussahen wie nicht gruppiert (klarer Hintergrund, keine Trennzeichen), aber es funktionierte gut. Die Fußzeile bleibt nicht mehr am unteren Rand des TableViews hängen.

+0

Danke Kumpel ... Zusätzlich muss ich Abschnitt Höhe hinzufügen .. Ansonsten funktioniert gut .. –

+0

Um den Abschnitt Kopfzeile, die im "Grouped" UITableView Stil angezeigt wird, zu verbergen, siehe https://stackoverflow.com/questions/ 19056428/how-to-hide-first-section-header-in-uitableview-gruppierter Stil –

4

Eine Möglichkeit, dies zu umgehen, wenn Sie die Fußzeile als eine der Zellen als die letzte Zelle in der Scroll-Ansicht eingestellt (getan werden könnte, aber es als das letzte Element im Array einstellen, dass Sie die uitable Set von)

5

Fußzeilen sollen haften. Der Trick besteht darin, jeder Sektion eine zusätzliche Zelle hinzuzufügen und die Fußzeile dorthin zu rendern. Wenn Sie mehr Hilfe benötigen, fügen Sie einen Kommentar hinzu, aber es sollte ziemlich einfach sein.

EDITS:

Q: In Ordnung. Ich verwende Core Data und NSFetchedResultsController, um das TableView aufzufüllen. Wäre es schwieriger, dies zu erreichen?

A: Überhaupt nicht. Außer Kraft setzen

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

Um eine zusätzliche Zelle in jedem Abschnitt hinzufügen und in

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Test, wenn die indexPath.row> als Ihre fetchedResultsController die Zeilen für diesen Abschnitt. Wenn dies der Fall ist, fügen Sie in Ihrer Zelle die Fußzeileninformationen hinzu.

+0

In Ordnung. Ich verwende Core Data und NSFetchedResultsController, um das TableView aufzufüllen. Wäre es schwieriger, dies zu erreichen? – mhbdr

+0

Überhaupt nicht.Außer Kraft setzen - (NSInteger) tableview: (UITableView *) tableview numberOfRowsInSection: (NSInteger) Abschnitt Um eine zusätzliche Zelle in jedem Abschnitt hinzufügen und - (UITableViewCell *) tableview: (UITableView *) tableview cellForRowAtIndexPath: (NSIndexPath *) indexPath Testen Sie, ob indexPath.row> die Zeilen Ihres fetchedresultscontrollers für diesen Abschnitt sind. Wenn dies der Fall ist, fügen Sie in Ihrer Zelle die Fußzeileninformationen hinzu. –

0

Eine zusätzliche Zelle hinzuzufügen, sie unsichtbar zu machen und Ihre Ansicht dorthin zu übertragen, ist keine empfehlenswerte Möglichkeit, eine Fußzeile hinzuzufügen. Dadurch ist es richtig ziemlich geradlinig:

- (UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section { 
    NSString* sectionFooter = [self tableView:tableView titleForFooterInSection:section]; 

    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, yourWidth, yourHeight)]; //create a view- the width should usually be the width of the screen 
    UILabel* label = [[UILabel alloc] initWithFrame:someFrame]; 

    label.backgroundColor = [UIColor blueColor]; 
    label.textColor = [UIColor whiteColor]; 
    label.text = sectionFooter; 

    [view addSubview:label]; 

    return view; 
} 

Sie müssen auch Tableview implementieren: titleForFooterInSection: Wenn Sie Text hinzufügen möchten, wie ich hier habe.

+2

Ihre Antwort funktioniert für das Hinzufügen einer Fußzeile, aber diese Fußzeile wird am Ende der Tabellenansicht angeklebt, genau das, was sie nicht wollte. – rsc

1

Ich hatte ein ähnliches Problem, als ich herausfand, dass mein Code nicht im Querformat-Modus funktionierte und nur im Hochformat-Modus funktionierte. In meinem alten Code kann die Tabellenansicht in Landscape nicht tiefer scrollen als in der sichtbaren Ansicht, und beim Scrollen springt sie zurück in die oberste Zeile (ohne dass ich die unteren Zeilen sehen kann). Alles, was ich ändern muss, ist sicherzustellen, dass die Höhe auf 44 als Standard-Zellenhöhe eingestellt ist. Meine Fußzeile ist also grundsätzlich eine andere Zelle mit clearColor. Hinweis: Meine App verwendet "AutoLayout"

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 
{ 
    CGRect screenBounds = [UIScreen mainScreen].bounds; 
    CGFloat width = screenBounds.size.width; 
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, 44)]; 
    view.backgroundColor = [UIColor clearColor]; 

    UILabel *label = [[UILabel alloc] initWithFrame:view.frame]; 
    label.text = @"Your Text"; 
    [view addSubview:label]; 
    return view; 
} 
Verwandte Themen