7

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

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

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

4 回答 4

15

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

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

  • 不理想但很简单:使用最后一节的页脚视图作为静态页脚。这将在某些条件下起作用:
    • 您的UITableView样式必须是UITableViewStylePlain(与UITableViewStyleGrouped节页眉/页脚的行为相同)UITableView tableHeaderViewtableFooterView
    • 您将无法将最后一节页脚用于其真正目的:为特定部分提供页脚信息

这是一个简单的例子:

- (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. 一个小条件:
    • 你的self.view财产UIViewController不能是你的UITableView对象。这意味着您不能子类化UITableViewController,而是UIViewController使您的控制器符合UITableViewDataSourceUITableViewDelegate协议。它实际上比它看起来更简单,并且比直接使用更好(就我而言)UITableViewController

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

视图控制器.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@end

视图控制器.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:行。

希望这会有所帮助,

其他详情可以问我,

于 2013-07-12T10:34:54.047 回答
0

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

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

于 2013-07-12T10:23:05.117 回答
0

试试这个,它会让你的视图总是在视图的底部:

footerView.transform = CGAffineTransformMakeTranslation(0, scrollView.contentOffset.y)
于 2016-11-03T14:32:54.073 回答
-3

一个非常hacky的解决方案,但这会起作用:

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

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

于 2013-07-12T10:21:03.137 回答