2013-03-12 14 views
9

muszę zaimplementować coś takiego:Jak zrobić pasek nawigacji jak Instagram

NavBar stay on top, tableView bounces

tableView musi odbijać, ale nie pasek nawigacji.

Próbowałem wielu różnych wariantów. coś takiego:

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

Get to:

1 2

nie nadaje bo w Instagram wielkość Tableview nie zmienia (wystarczy spojrzeć na wskaźniki przewijania, jeśli wielkość tableView zmienił się, również zmienili)

please look at scroll indicators please look at scroll indicators

Próbowałem również dodać View jako subView do tableView, działa, ale nie dokładnie to, czego potrzebuję. Na pasku nawigacyjnym Instagram poza tableView, więc nie jest odpowiedni.

W pasku wyszukiwania facebook aplikacja zachowuje się dokładnie tak samo

enter image description here

Czy ktoś może mi pomóc?

Dzięki!

+0

Naprawdę nie jestem pewien, czy mam to poprawnie, czy mówisz, że chcesz widok nagłówka, który pokrywa twoją zawartość? Może umieścić więcej adnotacji na obrazach, ponieważ nie widzę żadnych pasków nawigacyjnych, które mogą być tym, co mnie myli. – 7usam

+0

@ 7usam, prawdopodobnie jestem w błędzie, muszę powiedzieć, że zachowanie paska nawigacji (lub innego widoku) jest takie samo jak na Instagramie lub Facebooku. – wiruzx

+0

Czy mówisz o "plakietce" na Instagramie? – 7usam

Odpowiedz

1

Zastosuj to samo podejście w kodzie przykładowym, ale zamiast zwiększać wysokość widoku stołu, masz wstępnie załadowaną dodatkową (niewidoczną wysokość) i po prostu przesuń ją w górę, zmniejszając ramkę y. Dodatkowa wysokość będzie poza ekranem. Jeśli wysokość zawartości nie jest wystarczająco duża, aby wyjść poza ekran, wtedy nie musisz mieć wysokości poza ekranem.

Dodaj nagłówek z wysokością = 0 na początku, a podczas przewijania w dół zwiększa rozmiar, do 100 (pusty nagłówek będzie teraz wyłączony). W ten sposób zawartość nie zostanie obcięta podczas przewijania.

+0

@wiruzx czy możesz wyjaśnić, jak to nie działa poprawnie? – 7usam

+0

jeśli spojrzysz na zrzut ekranu 2 i 3, musisz zauważyć, że komórki widoku tabeli chowają się na klawiaturze r widok. Szybkość przesuwania widoku z góry i komórek jest różna, ponieważ zmieniłem y-cordinate widoku tabeli – wiruzx

+0

@wiruzx Widzę, problem polega na tym, że przewijanie tabeli jest przewijane. Co sądzisz o dodaniu nagłówka, zobacz zredagowaną odpowiedź. – 7usam

1

"Pasek nawigacyjny" instagramu nie jest paskiem nawigacyjnym. To nagłówek sekcji tabeli. Zauważysz, że po dotknięciu zdjęcia cały pasek nawigacyjny zostanie odsunięty. To dlatego, że jest częścią kontrolera widoku tabeli, a nie "prawdziwego" paska nawigacyjnego.

Można to osiągnąć za pomocą kontrolera UINavigationController, ale ukrywając pasek nawigacji (setNavigationBarHidden: YES). Po prostu wywołujesz pushViewController: animowany: ręcznie, kiedy chcesz naciskać.

Co ciekawe, wygląda jak inne zakładki na Instagramie, wystarczy użyć zwykłego paska nawigacji i nie robić nic nadzwyczajnego. Sądzę, że naprawdę chcieli te 44 punkty z powrotem na ekranie głównym.

+0

, ale jeśli ten nagłówek sekcji, to dlaczego nie odbija się od reszty tabeli? i dlaczego przewijania wskaźnik zatrzymuje się tuż przed nim? (zrzut ekranu nr 5) – wiruzx

+1

Nie byłby nagłówkiem tabeli, a nie nagłówkiem sekcji tabeli? – 7usam

+1

@ 7usam w każdym razie na pasku narzędziowym na Instagramie poza tabeląView – wiruzx

1

Jeśli kierowania iOS 5+ niż można łatwo dostosować pasek nawigacyjny tak:

1- Dodaj swoją TableViewController wewnątrz UINavigationController

2- Dostosuj Pasek nawigacyjny:

Ustaw obraz tła Navigation Bar

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

Dodaj Refresh przycisk po prawej stronie

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]; 

nadzieję, że pomoże!

1

Możesz użyć poniższej metody w swojej klasie, w której chcesz dodać efekt na pasku nawigacyjnym, tak jak na Instagramie.

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

} 
Powiązane problemy