iOS中的静态页脚

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

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

- (id)initWithStyle:(UITableViewStyle)style
{
    if ((self = [super initWithStyle: style]))
    {
        UIView *footer = [[UIView alloc] initWithFrame: CGRectMake(0,1,45)];
        footer.backgroundColor = [UIColor clearColor];
        self.tableView.tableFooterView = footer;
        self.tableView.frame = CGRectMake(0,320,100);
        footer.hidden = NO;

    }

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

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

解决方法

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

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

>不理想但很简单:使用最后一部分的页脚视图作为静态页脚.这将在某些条件下工作:

>您的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,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:行.

希望这会有所帮助,

随意问我其他细节,

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...