2014-01-10 3 views
4

Это вопрос макета интерфейса. Мне нужно разместить баннерные объявления в нижней части всех просмотров в приложении для iPhone. Баннерные объявления являются общими и загружаются только в том случае, если они доступны.Рекламный баннер блокирует нижнюю часть UITableView

Два UIViewControllers содержат UITableViews, которые занимают весь экран. У меня есть два связанных вопроса, которые я не знаю, как обращаться. Когда рекламное объявление загружается, он скрывает нижнюю часть представления таблицы, блокируя пользователя от возможности выбрать любую из последних двух ячеек. Кроме того, индекс правой стороны больше не центрирован и находится ниже, чем нужно.

Очевидно, Apple отклонит приложение, если пустое место в случае, если объявление не загружается (исправьте меня, если я ошибаюсь в этом), поэтому необходимо, чтобы таблицы просмотрели всю длину если объявление отсутствует.

Неужели кто-нибудь решает эту проблему? Что может быть лучшей практикой для преодоления этого? Благодаря!

+1

Вы можете отрегулируйте высоту стола. –

+0

К сожалению, я пробовал это без везения – Pheepster

ответ

2

Вы не можете использовать UITableViewController, если хотите иметь другие виды рядом с табличным представлением. В UITableViewController свойство суперкласса UIViewController - это вид таблицы, поэтому по умолчанию он занимает весь экран.

Вместо этого следует использовать простой UIViewController и добавить как представление таблицы, так и представление баннера в виде подзонов. Используйте функцию автоматического макета раскадровки, чтобы определить точную геометрию в соответствии с установленными вами ограничениями. Вид таблицы может автоматически расширяться, когда баннер пуст.

Вы выполняете работу над таблицей, объявляя класс контроллера совместимым с протоколами UITableViewDataSource и UITableViewDelegate и устанавливая класс в качестве делегата в виде таблицы.

+0

Извините, я бы лучше сказал в своем посте. Я использую UIViewController с UITableView в нем. – Pheepster

3

После некоторого исследования я обнаружил, как решить эту проблему.

Когда рекламный баннер загружается после инициализации представления таблицы, он может охватывать нижнюю часть представления таблицы, что делает эти скрытые ячейки недоступными. Пользователь может прокрутить представление вверх достаточно высоко, чтобы увидеть их, но когда прокрутка отпущена, представление таблицы возвращается к исходному, и невозможно выбрать те самые нижние ячейки. Чтобы преодолеть это это, я сделал следующее:

CGFloat padding = self.view.frame.size.height - (self.view.frame.size.height - (SharedAdBannerView.frame.size.height + self.toolbar.frame.size.height + 20)); 

UIEdgeInsets bottomPadding = UIEdgeInsetsMake(0, 0, padding, 0); 
[self.riversTableView setContentInset:bottomPadding]; 
[self.riversTableView setScrollIndicatorInsets:bottomPadding]; 
11

я понял, как сделать это для обычного UITableViewController без использования пользовательских UIViewController с UITableView внутри. Хитрость заключается в том, чтобы динамически регулировать положение баннерного вида, чтобы оно всегда находилось в нижней части видимой области.

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

- (void)viewDidLoad 
{ 
     [super viewDidLoad]; 

     ... 

     //init banner and set it's frame (here we use 320x50 banner) 
     self.bannerView = [[UIView alloc] init]; 
     self.bannerView.frame = CGRectMake(0, self.view.frame.size.height - 50, 320, 50); 

     //add as subview 
     [self.view addSubview:self.bannerView]; 

     //set proper bottom inset depending on your banner height 
     self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 50, 0); 
} 

Когда таблица прокручивается вам нужно настроить положение баннера в зависимости от содержания смещения:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    //refresh banner frame during the scrolling 
    CGRect bannerFrame = self.bannerView.frame; 
    bannerFrame.origin.y = self.view.frame.size.height - 50 + self.tableView.contentOffset.y; 
    self.bannerView.frame = bannerFrame; 
} 
+0

Работал как шарм, хотя вам, возможно, потребуется включить навигатор, если вы его используете. –

+0

Можете ли вы опубликовать небольшой демонстрационный проект, показывающий, как вы это сделали? –

Смежные вопросы