A UITableView
tableFooterView
property является объектом UIView
, который всегда отображается внизу содержимого, под последним разделом. Даже если это не совсем ясно в документации Apple (извлечение: «Возвращает вспомогательный вид, который отображается ниже таблицы.»).
Если вы хотите, чтобы колонтитулы быть статическими и не плавающим, у вас есть два простых вариант:
- Не идеально, но простой: Используйте последний раздел Высказаться колонтитул как статичная сноска. Это будет работать при определенных условиях:
- вашего
UITableView
стиль должен быть UITableViewStylePlain
(как дает такое же поведение для заголовков разделов/колонтитулы как к UITableView tableHeaderView
и tableFooterView
- Вы не сможете использовать последний раздел колонтитул для своей истинной цели: предоставление информации колонтитула к конкретному разделу
Вот простой пример:
- (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;
}
- Лучшее решение прямо сейчас: Добавьте UIView (либо в код, либо в ваш XIB) на том же уровне, что и ваш
UITableView
. Одно небольшое условие:
self.view
Недвижимость вашего UIViewController
не может быть вашим объектом UITableView
. Это означает, что вы не можете подкласса UITableViewController
, но UIViewController
и совместите ваш контроллер с протоколами UITableViewDataSource
и UITableViewDelegate
. Это на самом деле проще, чем выглядит, и лучше (насколько мне известно), чем напрямую использовать UITableViewController
.
Вот простой пример кода (но вы можете сделать то же самое с помощью Interface Builder):
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
Вы также можете указать UIViewAutoresizing
mask to ma ke работает без проблем в портрете и пейзаже, но я не усложнил этот довольно простой код.
ВНИМАНИЕ: Эти файлы .h и .m не будут скомпилированы, поскольку я не применил необходимые методы UITableViewDataSource
. Прокомментируйте строку setDataSource:
, если хотите ее увидеть.
Надеется, что это поможет,
Не стесняйтесь задавать мне другие детали,
Используя этот код будет отображаться только при прокрутке до нижней части таблицы. если вы хотите, чтобы он отображался все время, а не создавал небольшой вид и помещал его под табличное представление. что это сделает. – Dilip