2013-03-12 2 views
9

Мне нужно реализовать что-то вроде этого:Как сделать панель навигации, как Instagram

NavBar stay on top, tableView bounces

Tableview должны отскакивать, но не панель навигации.

Я пробовал кучу разных вариантов. Что-то вроде этого:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGRect imageViewFrame = self.imageView.frame; 
    CGRect tableViewFrame = self.tableView.frame; 
    //ImageView - is top view(instead of NavBar) 
    //defaultHeight - is default height of tableView 
    imageViewFrame.origin.y = MIN(0, MAX(-scrollView.contentOffset.y, -100)); 
    tableViewFrame.origin.y = imageViewFrame.origin.y + 100; 
    tableViewFrame.size.height = defaultHeight - imageViewFrame.origin.y; 

    self.imageView.frame = imageViewFrame; 
    self.tableView.frame = tableViewFrame; 
} 

Получите это:

12

он не подходит, так как в Instagram размер Tableview не меняется (только посмотрите на индикаторы прокрутки, если размер tableView изменены, они также изменены)

please look at scroll indicators please look at scroll indicators

Также я попытался добавить View as subView в tableView, он работает, но не совсем то, что мне нужно. В навигационной панели Instagram за пределами таблицыView, поэтому он не подходит.

В facebook поиска приложение панели ведет себя точно так же

enter image description here

Может кто-нибудь мне помочь?

Спасибо!

+0

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

+0

@ 7usam, возможно, я ошибаюсь, мне нужно, чтобы поведение панели навигации (или любого другого вида) было таким же, как в Instagram или Facebook. – wiruzx

+0

Вы говорите о «теге имени» в Instagram? – 7usam

ответ

1

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

Добавить заголовок с высотой = 0 при запуске, а при прокрутке вниз он увеличит размер до 100 (пустой заголовок будет отключен от экрана). Таким образом, контент не будет отключен при прокрутке.

+0

@wiruzx вы можете объяснить, как это работает неправильно? – 7usam

+0

если вы посмотрите на скриншот 2 и 3, вы должны заметить, что ячейки табличного вида скрываются от uppe r вид. Скорость перемещения верхнего вида и ячеек дефрената, потому что я изменил y-cordinate of tableview – wiruzx

+0

@wiruzx Я вижу, проблема в том, что свитки с табличным просмотром. Что вы думаете о добавлении заголовка, см. Отредактированный ответ. – 7usam

1

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

Вы можете добиться этого, используя UINavigationController, но скрывая панель навигации (setNavigationBarHidden: YES). Вы просто вызываете pushViewController: анимированный: вручную, когда вы хотите нажать.

Интересно, что другие вкладки instagram просто используют обычную навигационную панель и ничего не делают. Я думаю, они действительно хотели, чтобы эти 44 очка вернулись на основной экран подачи.

+0

, но если этот заголовок этого раздела, то почему он не отскакивает от остальной части таблицы и почему свиток Индикатор останавливается прямо перед ним? (скриншот № 5) – wiruzx

+1

Не был бы заголовком таблицы, а не заголовком секции таблицы? – 7usam

+1

@ 7usam в любом случае в навигационной панели Instagram за пределами таблицыView – wiruzx

1

Если вы ориентируетесь IOS 5+, чем вы можете легко настроить панель навигации, как это:

1 Добавить Ваш TableViewController внутри UINavigationController

2- настроить панель навигации:

Установить фоновое изображение для панели навигации

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"bar_background"] 
            forBarMetrics:UIBarMetricsDefault]; 

Добавить Refresh кнопку на правой стороне

UIImage *img = [UIImage imageNamed:@"refresh.png"]; 
UIButton *rButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[rButton setImage:img forState:UIControlStateNormal]; 
[rButton addTarget:vc action:@selector(didTapRefreshButton:) forControlEvents:UIControlEventTouchUpInside]; 
rButton.frame = CGRectMake(0.0f, 0.0f, img.size.width, img.size.height); 
UIBarButtonItem *rButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rButton]; 

self.navigationItem.rightBarButtonItem = rButtonItem; 
[rButtonItem release]; 

Надежда, что помогает!

1

Вы можете использовать приведенный ниже метод в своем классе, в котором вы хотите добавить эффект на панель навигации, как там, в Instagram.

 - (void)scrollViewDidScroll:(UIScrollView *)sender { 
//Initializing the views and the new frame sizes. 
UINavigationBar *navbar =self.navigationController.navigationBar; 
UIView *tableView = self.view; 
CGRect navBarFrame = self.navigationController.navigationBar.frame; 

CGRect tableFrame = self.view.frame; 

//changing the origin.y based on the current scroll view. 
//Adding +20 for the Status Bar since the offset is tied into that. 

if (isiOS7) { 
    navBarFrame.origin.y = MIN(0, MAX(-44, (sender.contentOffset.y * -1))) +20 ; 
    tableFrame.origin.y = navBarFrame.origin.y + navBarFrame.size.height; 
}else{ 
    navBarFrame.origin.y = MIN(0, (sender.contentOffset.y * -1)) +20; 
    tableFrame.origin.y = MIN(0,MAX(-44,(sender.contentOffset.y * -1))) ; 
} 

navbar.frame = navBarFrame; 
tableView.frame = tableFrame; 

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