Przewiń do góry widoku UITableView, dotykając paska stanu
Wiem, że istnieje mnóstwo kodu, aby przewijać widok tabeli do góry, ale chcę to zrobić, gdy górny pasek stanu jest stuknięty, tak jak w natywnych aplikacjach Apple. Czy to możliwe?
9 answers
Dostajesz to za darmo, ale powinieneś sprawdzić, czy scrollsToTop
atrybut twojego UITableView
jest YES.
Kiedy to nie działa, to kiedy masz obiekt UIScrollView
(lub klasę potomną, jak UITextView) osadzony wewnątrz innej klasy UIScrollView
(Jak UITableView
). W tym przypadku ustaw scrollsToTop
Na wbudowanej klasie UIScrollView
Na NO. Następnie będzie działać zachowanie tap-the-status-bar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-17 07:48:26
Jeśli pochodzisz z Google i potrzebujesz pełnej listy kontrolnej:
- Sprawdź, czy Ustawiłeś scrollsToTop=YES (zgodnie z sugestią Marka) na Twoim UITableView
- Upewnij się, że ustawiłeś scrollsToTop = NO na wszystkich innych UITableViews / UIScrollViews / UITextViews w oknie, aby nie przechwytywały kliknięcia. Odkryłem, że wiele razy drukuję wszystkie widoki w moim oknie, aby to debugować...
- Upewnij się, że widok tabeli jest na 0/0 (współrzędne x/y) w obrębie okno-w ten sposób system wie, że powinien przekazać wiadomość
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-17 07:49:04
Korzystając z informacji podanych w innych odpowiedziach, dodałem następujący kod do mojego UITableViewController get it to work:
- (void)viewDidLoad { [super viewDidLoad]; for (UITextView *view in self.view.subviews) { if ([view isKindOfClass:[UITextView class]]) { view.scrollsToTop = NO; } } self.tableView.scrollsToTop = YES; }
Przegląda wszystkie widoki w hierarchii kontrolera UITableViewController i wyłącza scrollsToTop dla wszystkich przeglądów UITextView, które przechwytywały Zdarzenie touch. Następnie upewnij się, że tableView nadal będzie otrzymywać dotyk.
Możesz to zmodyfikować, aby przejść przez inne UITableViews / UIScrollViews / UITextViews, które mogą przechwytywać jako cóż.
Mam nadzieję, że to pomoże!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-07 23:10:33
Miałem ten sam problem, ale naprawiony przez następujące kroki:
- Ustaw scrollsToTop = YES dla tableview, który chcesz przewijać do góry.
- Ustaw scrollsToTop = NO dla wszystkich innych tableview lub collection view lub scrollview.
- jeśli którakolwiek z komórek tableview ma widok kolekcji . Upewnij się, że scrollsToTop ma wartość NO również dla widoku kolekcji.
Jeśli kontroler widoku / kontroler nawigacji zostanie dodany jako podgląd podrzędny w innym kontrolerze widoku, upewnij się, że go Ustawiłeś jako kontroler dziecka.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-22 07:26:52
Jak powiedział Mark, możesz mieć tylko jedną podklasę UIScrollView (Zwykle widok tabeli), która ma właściwość scrollsToTop ustawioną na TRUE. Prawdopodobnie masz inne, zazwyczaj UITextView w widoku. Po prostu ustaw ich Właściwość scrollsToTop na FALSE i możesz iść.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-02 02:55:28
Wiem, że to dość stare, ale mam nadzieję, że to pomoże. Zgodnie z tym, co powiedział @MarkGranoff, scrollsToTop nie działa, jeśli więcej niż jeden UIScrollView, lub jego podklasy, ma ustawione na YES( wartość domyślna), prawdopodobnie warto sprawdzić, kto faktycznie psuje to zachowanie. Prosta metoda poniżej pętli na podviews widoku i rejestruje wartość scrollsToTop wszystkich UIScrollView w widoku. Najlepiej, aby być wywołanym w twoim poglądudidappear metoda.
- (void)checkForScrollViewInView:(UIView *)view {
for (UIView *subview in [view subviews]) {
if ([subview isKindOfClass:[UIScrollView class]]) {
NSLog(@"scrollsToTop enabled: %i in scroll view %@", ((UIScrollView *)subview).scrollsToTop, subview);
}
if (subview.subviews.count > 0) {
[self checkForScrollViewInView:subview];
}
}
}
To jest tylko kod debugowania. Po znalezieniu wartości scrollsToTop dla każdej z podklas UIScrollView upewnij się, że tylko jedna jest ustawiona na YES.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-21 04:07:56
W pliku nagłówkowym UIScrollView:
// gdy użytkownik dotknie paska stanu, widok przewijania pod dotykiem, który znajduje się najbliżej paska stanu, zostanie przewinięty do góry, ale tylko jeśli jego właściwość
scrollsToTop
to YES, jego delegat nie zwraca nie zshouldScrollViewScrollToTop
i nie znajduje się już na górze. // Na iPhonie wykonujemy ten gest tylko wtedy, gdy jest jeden widok przewijania na ekranie zscrollsToTop
= = YES. Jeśli zostanie znalezionych więcej niż jeden, żaden nie będzie przewijany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 11:47:18
Na przykład, jeśli masz widok tabeli i widok przewijania jak znaczniki takie jak ten
Powinieneś zrobić coś takiego w viewDidLoad
self.tableView.scrollsToTop = true
self.tagsView.scrollsToTop = false
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-03 14:18:14
Może być Wiele Potomków UIScrollView załadowanych np.: posiadanie kontrolera UIPageViewcontroller na każdej stronie zawierającej UITableViews.
Właściwość scrollsToTop jest domyślnie true .
Więc oprócz obsługi zagnieżdżonej właściwości scrollsToTop UIScrollViews, powinieneś wykonać następujące czynności:
//When the view is loaded disable scrollsToTop, this view may not be the visible one
override func viewDidLoad() {
super.viewDidLoad()
...
tableView.scrollsToTop = false
}
//Now it's time to enable scrolling, the view is guaranteed to be visible
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
tableView.scrollsToTop = true
}
//Do not forget to disable scrollsToTop, making other visible UIScrollView descendant be able to be scrolled to top
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.tableView.scrollsToTop = false
}
W ten sposób tylko jeden górny poziom scrollsToTop UITableView zostanie ustawiony na true.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-09 14:35:46