UITableView 的 tableFooterViewproperty 是一个 UIViewobject,它始终显示在内容的底部,位于最后一部分的下方。即使这在 Apple 的文档中并不是很清楚(摘录:“返回显示在 below table 的附件视图。”)。
如果您希望页脚是静态且非浮动的,您有两个简单的选择:
- 不理想但简单:使用最后一节的页脚视图作为静态页脚。这将在某些条件下起作用:
- 您的
UITableView 样式必须为UITableViewStylePlain(因为UITableViewStyleGrouped 对部分页眉/页脚的行为与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;
}
- 目前最好的解决方案:添加与
UITableView 相同级别的 UIView(在代码中或在您的 XIB 中)。一个小条件:
-
UIViewController 的self.view 属性不能是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 掩码,使其在纵向和横向中无缝工作,但我并没有使这个相当简单的代码复杂化。
警告:这个 .h 和 .m 文件不会编译,因为我没有放入 UITableViewDataSource 所需的方法。如果您想查看它的实际效果,请评论 setDataSource: 行。
希望这会有所帮助,
请随时询问我其他详细信息,