2013-05-06 8 views
5

Obecnie mam view controller, który składa się z Navigation bar, a następnie UIView, który ma dwa UIButtons dodane jako subView. Następnie pod numerem UIView zaczyna się pod numerem UITableView.Wykonaj przewijanie UIView z UITableView, ale od góry do góry poza widokiem

W chwili, gdy użytkownik przewija numer UITableView, przechodzi on za UIView i . To, co tak naprawdę chciałbym zrobić, to, aby UIView i UIButtons przesuwały się w górę w widoku tabeli, ale tylko o wartość ich wysokości, która w tym przypadku wynosi 58 pikseli. Przepływ byłby taki ...

1) Zwoje stołu i UIView przesuwa się wraz z nim o pierwsze 58 pikseli.

2) Użytkownik kontynuuje przewijanie tabeli, ale tylko "szpilki" UIView są poza zasięgiem pod navigation bar.

3) Gdy użytkownik przewinie tabelę z powrotem, UIView jest następnie podnoszona i przeciągana do widoku. Wierzę, że nowa aplikacja na Facebooku robi coś podobnego na osi czasu.

Nie chcę ustawić UIView jako tabeli TableHeaderView, ponieważ mam również opcję "przeciągnij, aby odświeżyć", która następnie znajduje się nad przyciskami i wygląda okropnie. Próbowałem odtwarzać z właściwościami contentOffset bazowego scrollview stołu, ale uderzyłem w ścianę z cegły.

Wszelkie porady dotyczące tego, od czego zacząć, będą mile widziane.

Dzięki

EDIT: mam zdobyć trochę dalej i za pomocą tego kodu, aby przesunąć ramkę na UIView.

-(void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    NSLog (@"Content Offset: %f", self.tableView.contentOffset.y); 
    NSLog (@"Button Frame: %f", self.btnBackground.frame.origin.y); 

     if (self.tableView.contentOffset.y > 0) 
     { 
      CGRect newFrame = self.btnBackground.frame; 
      newFrame.origin.x = 0; 
      newFrame.origin.y = -self.tableView.contentOffset.y; 
      [self.btnBackground setFrame: newFrame]; 
     } 

} 

Problem jest teraz, że metoda delegat scrollViewDidScroll nie zostanie zwolniony na tyle szybko, jeśli widok tabeli jest przewijany szybko. W rezultacie UIView nie wraca do pierwotnej pozycji, gdy przewija się szybko.

+1

Hej, próbuję rozwiązać podobny problem już teraz. Czy kiedykolwiek zastanawiałeś się, co robić? @paulmorris – Thomas

+0

Powiązane pytanie: http://stackoverflow.com/questions/25374090/move-a-view-when-scrolling-in-uitableview –

+0

Hej, ja też doszedłem do podobnej sytuacji. Projektant chce, aby układ zachowywał się dokładnie tak, jak CoordinatorLayout w systemie Android. Btw to wymyśliłeś? –

Odpowiedz

0

Dobrze zadawane pytania (y) dobrze, dla mnie bym pierwszy: użyć głównego UIScrollView, który zawiera zarówno swoją Topview i tableView pod nim i że ma taką samą szerokość jak swoim górnym UIView i UITableView i ustawić jego wysokość do mieć wysokość (tableView) + wysokość (topView). Po drugie: od UITableView jest subClass z UISCrollView można użyć delegata scrollViewDidScroll, aby wiedzieć, czy tableview jest przewijany w górę lub w dół. w ten cas będziesz miał dwa przypadki:

1) tableview przewinie w górę => ustawić zawartość przesunięcie głównego Scrollview być

[scrollView setContentOffset:CGPointMake(0, 58) animated:YES]; 

2), gdy widok tabeli jest przewijane w dół cię można ponownie wyzerować odsłonę zawartości

[scrollView setContentOffset:CGPointMake(0, 0) animated:YES]; 
+0

Dzięki za odpowiedź, ale nie przewija ona automatycznie widoku z góry w widoku tabeli i przewijania. To wszystko musi wyglądać zasadniczo jak UIView jest częścią tableView i płynnie z nim przewija. –

0

Przesunięcie treści przewijania to dobry pomysł. Także jeśli tableview ma tylko jedną sekcję, jednym podejściem jest tworzenie niestandardowego widoku nagłówka reprezentującego widgety najwyższego poziomu. Jeśli istnieje więcej niż jedna sekcja, utwórz dodatkową pustą sekcję, która zwróci niestandardowy nagłówek.

Możesz odwołać się do tego punktu przepełnienia stosu. Customize UITableview Header Section