我希望让我的页脚浮动到桌面视图上以便它始终可见,而不仅仅是当我滚动到底部时。
我尝试使用以下代码调整表格视图的大小:
- (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文件的大小。
答案 0 :(得分:15)
UITableView
的{{1}}属性是tableFooterView
对象,始终显示在内容的底部,最后一部分下方。即使在Apple的文档中并不是很清楚(摘录:“返回在表格 下方显示的附件视图。”)。
如果您希望页脚是静态和非浮动的,您有两个简单的选择:
UIView
样式必须为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;
}
相同的级别添加UIView(在代码中或在您的XIB中)。一个小条件:
UITableView
的{{1}}属性不得为self.view
对象。这意味着您不能将UIViewController
子类化为UITableView
,并使您的控制器符合UITableViewController
和UIViewController
协议。它实际上比它看起来更简单,更好的实现(就我而言)而不是直接使用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];
请注意,这将隐藏主窗口中将重叠的所有内容。