iOS中的静态页脚

时间:2013-07-12 09:59:02

标签: ios uitableview footer

我希望让我的页脚浮动到桌面视图上以便它始终可见,而不仅仅是当我滚动到底部时。

我尝试使用以下代码调整表格视图的大小:

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

    }

到目前为止,我没有运气。

我也尝试过使用其他窗口并调整所有.XIB文件的大小。

4 个答案:

答案 0 :(得分:15)

UITableView的{​​{1}}属性是tableFooterView对象,始终显示在内容的底部,最后一部分下方。即使在Apple的文档中并不是很清楚(摘录:“返回在表格 下方显示的附件视图。”)。

如果您希望页脚是静态和非浮动的,您有两个简单的选择:

  • 不理想但很简单:使用最后一部分的页脚视图作为静态页脚。这将在某些条件下工作:
    • 您的UIView样式必须为UITableView(因为UITableViewStylePlain对于UITableViewStyleGroupedUITableView 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的{​​{1}}属性不得为self.view对象。这意味着您不能将UIViewController子类化为UITableView,并使您的控制器符合UITableViewControllerUIViewController协议。它实际上比它看起来更简单,更好的实现(就我而言)而不是直接使用UITableViewDataSource

以下是代码中的一个简单示例(但您可以使用Interface Builder完全相同):

ViewController.h:

UITableViewDelegate

ViewController.m:

UITableViewController

您还可以指定#import <UIKit/UIKit.h> @interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> @end 蒙版,使其在纵向和横向无缝地工作,但我不会使这个相当简单的代码复杂化。

警告:这个.h和.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行,请对其进行评论。

希望这会有所帮助,

随时问我其他细节,

答案 1 :(得分:0)

您可以在UITableView下添加UIView,它将始终可见。

如果您需要大量自定义,只需将UITableView添加到UIViewController而不是使用UITableViewController。

答案 2 :(得分:0)

试试这个,它会让你的视图始终位于视图的底部:

footerView.transform = CGAffineTransformMakeTranslation(0, scrollView.contentOffset.y)

答案 3 :(得分:-3)

一个非常讨厌的解决方案,但这可行:

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

请注意,这将隐藏主窗口中将重叠的所有内容。