iOS 中的静态页脚
Posted
技术标签:
【中文标题】iOS 中的静态页脚【英文标题】:Static footer in iOS 【发布时间】:2013-07-10 20:11:57 【问题描述】:我希望让我的页脚浮动在表格视图上,以便它始终可见,而不仅仅是当我滚动到底部时。
我已尝试使用此代码调整表格视图的大小:
- (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 文件的大小。
【问题讨论】:
使用此代码它只会在您滚动到表格视图底部时显示。如果你想让它一直可见,而不是创建小视图并将其放在 tableview 下方。这样就可以了。 【参考方案1】:UITableView
的 tableFooterView
property 是一个 UIView
object,它始终显示在内容的底部,位于最后一部分的下方。即使这在 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:
行。
希望这会有所帮助,
请随时询问我其他详细信息,
【讨论】:
和这个问题一样:***.com/questions/15687370/…【参考方案2】:试试这个,它会让你的视图一直在视图的底部:
footerView.transform = CGAffineTransformMakeTranslation(0, scrollView.contentOffset.y)
【讨论】:
【参考方案3】:你可以在 UITableView 下添加 UIView,它会一直可见。
如果您需要大量自定义,只需将 UITableView 添加到 UIViewController 而不是使用 UITableViewController。
【讨论】:
是的,但仅在 UIViewController 的情况下是可能的。如果我的视图是 UITableViewController 那么? 如果您需要大量自定义,只需将 UITableView 添加到 UIViewController 而不是使用 UITableViewController 是的,这似乎是以无缝方式支持所有必需功能的终极解决方案。无论如何谢谢亲爱的:) 这个解决方案还有一个问题,我想在表格视图中使用静态单元格,可以在 UITableView 中使用,而不使用 UITableViewController。【参考方案4】:一个非常hacky的解决方案,但这会起作用:
UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window];
[keyWindow.viewForBaselineLayout addSubview:footer];
注意,这会隐藏主窗口中重叠的所有内容。
【讨论】:
以上是关于iOS 中的静态页脚的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Webpack 4 中的页眉/页脚(和 css/js 注入)生成静态页面的 html 模板(lodash 模板不起作用)?