2013-07-12 3 views
7

Im Глядя, чтобы мой нижний колонтитул плавал над табличным представлением Так, чтобы он всегда был видимым, и не только когда я прокручиваю нижнюю часть.Статический нижний колонтитул в iOS

я попытался изменить размеры вид таблицы, используя этот код:

- (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

Используя этот код будет отображаться только при прокрутке до нижней части таблицы. если вы хотите, чтобы он отображался все время, а не создавал небольшой вид и помещал его под табличное представление. что это сделает. – Dilip

ответ

-3

очень Hacky решение, но это будет работать:

UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window]; 
[keyWindow.viewForBaselineLayout addSubview:footer]; 

Осторожно, это скроет все, что в главном окне, что он будет перекрываться.

0

Вы можете добавить UIView под UITableView, и он будет всегда виден.

Если вам нужно много настроек, просто добавьте UITableView в UIViewController вместо использования UITableViewController.

+0

Да, но это возможно только в случае UIViewController. Если мое представление UITableViewController тогда? – Adeel

+1

Если вам нужно много настроек, просто добавьте UITableView в UIViewController вместо использования UITableViewController. –

+0

Да. Это кажется окончательным решением для поддержки всех необходимых функций в бесшовной манере. В любом случае спасибо дорогой :) – Adeel

15

A UITableViewtableFooterView property является объектом UIView, который всегда отображается внизу содержимого, под последним разделом. Даже если это не совсем ясно в документации Apple (извлечение: «Возвращает вспомогательный вид, который отображается ниже таблицы.»).

Если вы хотите, чтобы колонтитулы быть статическими и не плавающим, у вас есть два простых вариант:

  • Не идеально, но простой: Используйте последний раздел Высказаться колонтитул как статичная сноска. Это будет работать при определенных условиях:
    • вашего UITableView стиль должен быть UITableViewStylePlain (как дает такое же поведение для заголовков разделов/колонтитулы как к 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. Одно небольшое условие:
    • self.view Недвижимость вашего UIViewController не может быть вашим объектом 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 mask to ma ke работает без проблем в портрете и пейзаже, но я не усложнил этот довольно простой код.

ВНИМАНИЕ: Эти файлы .h и .m не будут скомпилированы, поскольку я не применил необходимые методы UITableViewDataSource. Прокомментируйте строку setDataSource:, если хотите ее увидеть.

Надеется, что это поможет,

Не стесняйтесь задавать мне другие детали,

+0

Как и этот вопрос: http://stackoverflow.com/questions/15687370/tablefooterview-property-doesnt-fix-the-footer-at-the-bottom-of-the-table-view? RQ = 1 – Zedenem

0

Попробуйте это, он будет держать ваш взгляд всех дней в нижней части окна:

footerView.transform = CGAffineTransformMakeTranslation(0, scrollView.contentOffset.y) 
Смежные вопросы