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,
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