Im Looking to get my footer to Float over a table view So that it is Always Visible and not only when i scroll to the bottom.
i have tried resizing the table view using this code :
- (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;
}
I have had no luck thus far.
I have also tried Using other windows and resizing all the .XIB files.
A UITableView
's tableFooterView
property is a UIView
object that is always displayed at the bottom of the content, below the last section. Even if that is not really clear in Apple's documentation (extract : "Returns an accessory view that is displayed below the table.").
If you want the footer to be static and non-floating, you have two easy choices :
UITableView
style must be UITableViewStylePlain
(as UITableViewStyleGrouped
gives the same behaviour to section headers/footers as to the UITableView tableHeaderView
and tableFooterView
Here is a simple example :
- (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
. One little condition :
self.view
property of your UIViewController
must not be your UITableView
object. That means you can't subclass UITableViewController
but UIViewController
and make your controller conform to UITableViewDataSource
and UITableViewDelegate
protocols. It's actually simpler than it looks and a better implementation (as far as I'm concerned) than using directly UITableViewController
.Here is a simple example in code (but you can do exactly the same using 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
You can also specify UIViewAutoresizing
mask to make it work seamlessly in portrait and landscape but I didn't to complicate this rather simple code.
WARNING : This .h and .m files won't compile as I didn't put in the UITableViewDataSource
required methods. Comment the setDataSource:
line if you want to see it in action.
Hope this will help,
Feel free to ask me other details,
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With