Статический нижний колонтитул в iOS

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

Я попытался изменить размер таблицы с помощью этого кода:

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

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

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

  • Не идеально, но просто: используйте нижний колонтитул последнего раздела как ваш статический нижний колонтитул. Это будет работать при некоторых условиях:
    • ваш стиль UITableView должен быть UITableViewStylePlain (поскольку UITableViewStyleGrouped дает такое же поведение в заголовках / UITableView tableHeaderView колонтитулах UITableView tableHeaderView и в tableFooterView 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 чтобы она работала плавно в портретной и альбомной UIViewAutoresizing но я не усложнил этот довольно простой код.

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

Надеюсь, это поможет,

Не стесняйтесь спрашивать меня о других деталях,

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

 footerView.transform = CGAffineTransformMakeTranslation(0, scrollView.contentOffset.y) 

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

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

Очень хакерское решение, но это будет работать:

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

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

  • Цвет фона UITableView над UISearchBar
  • Настройте цвет рамки раздела UITableView для каждого раздела
  • UITableView не обновляется
  • iOS: ускорение UITableView замедляется при выполнении анимаций в willDisplayCell
  • Удаление объекта в ячейке tableView из Parse
  • Идентификатор повторного использования идентификатора ячейки в игровых зонах XCode
  • Встроенные видео YouTube в UITableViewCell: как кэшировать, чтобы предотвратить перезагрузку?
  • Отключение MBProgressHUD с помощью UITableViewController
  • Как я могу перерабатывать объекты UITableViewCell, созданные из XIB?
  • Почему heightForRowAtIndexPath: приходите до cellForRowAtIndexPath :?
  • Нестандартная инициализация UITableVIewCell
  • Давайте будем гением компьютера.