2013-07-12 24 views
7

Zamierzam umieścić stopkę w widoku Float nad widokiem tabeli, tak aby była zawsze widoczna, a nie tylko podczas przewijania do dołu.Stopka statyczna w systemie iOS

Próbowałem zmiany rozmiaru widoku tabeli przy użyciu tego kodu:

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    if ((self = [super initWithStyle: style])) 
    { 
     UIView *footer = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 1, 45)]; 
     footer.backgroundColor = [UIColor clearColor]; 
     self.tableView.tableFooterView = footer; 
     self.tableView.frame = CGRectMake(0, 0, 320, 100); 
     footer.hidden = NO; 

    } 

nie miałem szczęścia do tej pory.

Próbowałem również użyć innych okien i zmienić rozmiar wszystkich plików .XIB.

+0

Używanie tego kod wyświetla się tylko po przewinięciu do dołu widoku tabeli. jeśli chcesz, aby była widoczna przez cały czas, niż twórz mały widok i umieść go poniżej widoku stołu. to zrobi. – Dilip

Odpowiedz

-3

Bardzo hacky rozwiązanie, ale to będzie działać:

UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window]; 
[keyWindow.viewForBaselineLayout addSubview:footer]; 

Uważaj, będzie to ukryć wszystko, co w głównym oknie, które będzie się pokrywać.

0

Możesz dodać UIView pod UITableView i będzie on zawsze widoczny.

Jeśli potrzebujesz dużo personalizacji, po prostu dodaj UITableView do UIViewController zamiast UITableViewController.

+0

Tak, ale jest to możliwe tylko w przypadku kontrolera UIViewController. Czy mój widok to UITableViewController? – Adeel

+1

Jeśli potrzebujesz dużo personalizacji, po prostu dodaj UITableView do UIViewController zamiast używać UITableViewController –

+0

Tak Wydaje się to być najlepszym rozwiązaniem do obsługi wszystkich wymaganych funkcji w bezproblemowy sposób. Tak czy inaczej, droga droga :) – Adeel

15

Właściwość tableFooterView to obiekt UIView, który jest zawsze wyświetlany u dołu zawartości, pod ostatnią sekcją. Nawet jeśli nie jest to jasne w dokumentacji Apple'a (extract: "Zwraca widok akcesoriów, który jest wyświetlany poniżej tabeli.").

Jeśli chcesz stopka być statyczna i nie pływających, masz dwie możliwości: łatwe

  • nie jest idealny, ale prosta: Użyj ostatniego odcinka w stopce widoku jako statycznej stopce. Będzie to działać na pewnych warunkach:
    • Twój styl UITableView musi być UITableViewStylePlain (jak daje takie samo zachowanie na nagłówki sekcji/stopek co do UITableView tableHeaderView i tableFooterView
    • nie będziesz mógł korzystać z ostatniej sekcji stopki dla jego prawdziwego celu: podając informacje stopki do określonej sekcji

Oto prosty przykład:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { 
    UIView *view = nil; 
    if (section == [tableView numberOfSections] - 1) { 
     // This UIView will only be created for the last section of your UITableView 
     view = [[UIView alloc] initWithFrame:CGRectZero]; 
     [view setBackgroundColor:[UIColor redColor]]; 
    } 
    return view; 
} 
  • Najlepsze rozwiązanie teraz: Dodaj UIView (w kodzie lub w XIB) na tym samym poziomie, co Twój UITableView. Jeden mały warunek:
    • Właściwość UIViewController nie może być obiektem UITableView. Oznacza to, że nie można podklasy UITableViewController, ale UIViewController i dostosować kontroler do UITableViewDataSource i UITableViewDelegate protokołów. To jest prostsze niż wygląda i lepsza implementacja (o ile mi wiadomo) niż używanie bezpośrednio UITableViewController.

Oto prosty przykład w kodzie (ale można to zrobić dokładnie to samo przy użyciu konstruktora Interface):

ViewController.h:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

@end 

ViewController.m:

#import "ViewController.h" 

@interface ViewController() 

@property (strong, nonatomic) UITableView *tableView; 
@property (strong, nonatomic) UIView *fixedTableFooterView; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    CGFloat fixedFooterHeight = 200.0; 

    // Initialize the UITableView 
    CGRect tableViewFrame = CGRectMake(CGRectGetMinX(self.view.bounds), CGRectGetMinY(self.view.bounds), CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds) - fixedFooterHeight); 
    self.tableView = [[UITableView alloc] initWithFrame:tableViewFrame style:UITableViewStylePlain]; // or Grouped if you want... 
    [self.tableView setDataSource:self]; 
    [self.tableView setDelegate:self]; 
    [self.view addSubview:self.tableView]; 

    // Initialize your Footer 
    CGRect footerFrame = CGRectMake(CGRectGetMinX(self.view.bounds), CGRectGetMaxY(self.view.bounds) - fixedFooterHeight, CGRectGetWidth(self.view.bounds), fixedFooterHeight); // What ever frame you want 
    self.fixedTableFooterView = [[UIView alloc] initWithFrame:footerFrame]; 
    [self.fixedTableFooterView setBackgroundColor:[UIColor redColor]]; 
    [self.view addSubview:self.fixedTableFooterView]; 
} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 
    [self setTableView:nil]; 
    [self setFixedTableFooterView:nil]; 
} 

@end 

Można również określić maskę UIViewAutoresizing dziękuję, że działa bezproblemowo w pionie i krajobrazie, ale nie musiałem komplikować tego prostego kodu.

OSTRZEŻENIE: Te pliki .h i .m nie będą się kompilować, ponieważ nie wprowadziłem wymaganych metod. Skomentuj linię setDataSource:, jeśli chcesz zobaczyć ją w akcji.

nadzieję, że pomoże,

Zapraszam do zadawania mi inne szczegóły,

+0

To samo, co to pytanie: http://stackoverflow.com/questions/15687370/tablefooterview-property-doesnt-fix-the-footer-at-the-bottom-the-table-view? rq = 1 – Zedenem

0

Spróbuj tego, to utrzymać pogląd sprecyzowane w dolnej części widoku:

footerView.transform = CGAffineTransformMakeTranslation(0, scrollView.contentOffset.y) 
Powiązane problemy