2012-07-15 11 views
6

Mam UITableView z 3 sekcje. Każdy z nich ma stopkę, którą dodałem przy użyciu metody viewForFooterInSection. Problem polega na tym, że gdy przewijam widok tabeli, stopka przykleja się do dolnej części ekranu i nie przewija się jak reszta komórek. Czy ktoś wie, jak to zrobić, aby stopka prawie działała jak komórka i przewijała się wraz z resztą stołu? Dzięki!iOS - viewForFooterInSection przykleja się do dolnej części UITableView

Odpowiedz

10

Właściwie to rozgryzłem. Prawdopodobnie nie jest to najmądrzejszy sposób, aby to zrobić, ale zmieniłem styl UITableView na zgrupowany i to naprawiło. Musiałem zmodyfikować TableView tak, aby komórki wyglądały tak samo, jak nie były zgrupowane (jasne tło, bez separatorów), ale działało dobrze. Stopka nie przykleja się już do dolnej części widoku TableView.

+0

Dzięki, koleś ... Dodatkowo muszę dodać wysokość sekcji. W przeciwnym razie działa dobrze .. –

+0

Aby ukryć nagłówek sekcji, który zostanie wyświetlony w stylu zgrupowanego "UITableView", zobacz https://stackoverflow.com/questions/ 19056428/how-to-hide-first-section-header-in-uitableview-grouped-style –

4

Jednym ze sposobów obejścia tego problemu jest ustawienie stopki jako jednej z komórek jako ostatniej komórki w widoku przewijania (można to zrobić, ale ustawiając ją jako ostatni element w tablicy, z której można ustawić wartość)

5

Stopki mają się trzymać. Sztuką jest dodanie dodatkowej komórki do każdej sekcji i renderowanie stopki. Jeśli potrzebujesz dodatkowej pomocy, dodaj komentarz, ale powinno to być proste.

zmian wprowadzanych przez:

P: porządku. Używam Core Data i NSFetchedResultsController, aby wypełnić TableView. Czy byłoby to trudniejsze do osiągnięcia tego?

A: Wcale. Przestawianie

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

Aby dodać dodatkową komórkę w każdej sekcji, aw

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

sprawdzić, czy indexPath.row> niż wierszy Twojego fetchedResultsController dotyczącymi tej sekcji. Jeśli jest to prawda, dodaj komórkę, która pokazuje informacje o stopce.

+0

Dobra. Używam Core Data i NSFetchedResultsController, aby wypełnić TableView. Czy byłoby to trudniejsze do osiągnięcia tego? – mhbdr

+0

Wcale nie.Przestawianie - (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: odcinek (NSInteger) Aby dodać dodatkową komórkę w każdej sekcji, a - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath sprawdzić, czy indexPath.row> niż wiersze fetchedresultscontroller dla tej sekcji. Jeśli jest to prawda, dodaj komórkę, która pokazuje informacje o stopce. –

0

Dodanie dodatkowej komórki, uczynienie jej niewidoczną i przedstawienie widoku nie jest wskazanym sposobem dodania stopki. Robi to właściwie jest całkiem prosta:

- (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; 
} 

Będziesz mieć również zaimplementować tableView: titleForFooterInSection: jeśli chcesz dodać tekst, jak mam tutaj.

+2

Twoja odpowiedź służy do dodawania stopki, ale ta stopka zostanie przyklejona na dole widoku tabeli, dokładnie to, czego nie chciał. – rsc

1

Zrobiłem podobny problem, gdy dowiedziałem się, że mój kod nie działa w trybie poziomym i działał tylko w trybie portretu. W moim starym kodzie, w widoku poziomym widok tabeli nie może przewijać niższego niż widok widoczny, a podczas przewijania odskoczył do górnego wiersza (nie pozwalając mi zobaczyć niższych rzędów). Wszystko, co muszę zmienić, to upewnić się, że wysokość jest ustawiona na 44 jako domyślna wysokość komórki. Tak więc moja stopka jest w zasadzie inną komórką z clearColor. Uwaga: moja aplikacja używa "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; 
} 
Powiązane problemy