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】:

UITableViewtableFooterViewproperty 是一个 UIViewobject,它始终显示在内容的底部,位于最后一部分的下方。即使这在 Apple 的文档中并不是很清楚(摘录:“返回显示在 below table 的附件视图。”)。

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

不理想但简单:使用最后一节的页脚视图作为静态页脚。这将在某些条件下起作用: 您的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 相同级别的 UIView(在代码中或在您的 XIB 中)。一个小条件: UIViewControllerself.view 属性不能是UITableView 对象。这意味着你不能继承 UITableViewControllerUIViewController 并使你的控制器符合 UITableViewDataSourceUITableViewDelegate 协议。它实际上比看起来更简单,并且比直接使用 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 中的静态页脚的主要内容,如果未能解决你的问题,请参考以下文章

拆分视图控制器中的 iOS 静态页脚

如何从 Webpack 4 中的页眉/页脚(和 css/js 注入)生成静态页面的 html 模板(lodash 模板不起作用)?

Android底页上的静态页脚视图

Android底表上的静态页脚视图

使用导航栏引导静态页脚[重复]

如何为我的静态 UITableView 添加页脚?