6

Mam UINavigationController, który może wyświetlać dane jako UICollectionView lub UITableView. iOS 7 automatycznie dostosowuje widok przewijania dla pierwszego zbioru UIScrollView utworzonego w hierarchii widoku.UITableView wskaźnik przewijania pod UINavigationBar po modyfikacji contentEdgeInset

Tak, UICollectionView jest ok, ale muszę ustawić contentEdgeInset dla UITableView. Po tej linii

self.tableView.contentInset = UIEdgeInsetsMake(44.0f, 0.0f, 0.0f, 0.0f);

zawartość UITableView pokazane są dobrze, ale wskaźnik przewijania nie zatrzymują się na UINavigationBar, ale nadal pod nią.

Jak mogę rozwiązać ten problem i zatrzymać wskaźnik przewijania na początku UINavigationBar?

enter image description here

Odpowiedz

11

Można również ustawić scrollIndicatorInsets następująco:

self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(44.0f, 0.0f, 0.0f, 0.0f); 

Nawiasem mówiąc, na iOS 7, należy użyć [self.topLayoutGuide length] zamiast twardych kodowania 44.0f pikseli. Z iOS 7 Transition Guide:

W topLayoutGuide i bottomLayoutGuide właściwości wskazują położenie górnych lub dolnych krawędziach prętów w widoku kontrolera widoku za.

+0

Idealny! Ale "[self.topLayoutGuide length]" nie działa dla mnie ... return 0. Dlaczego? – Fry

+2

Jeśli wywołasz go w -viewDidLoad, to może zwrócić zero. Najlepiej byłoby sprawdzić to w -viewDidLayoutSubviews i ustawić tam swoje wstawki. –

+0

również możesz chcieć ustawić insets zawartości w viewWillLayoutSubviews samo jak poniżej: 'self.tableView.contentInset = UIEdgeInsetsMake (0.0f, 0.0f, 49.0f, 0.0f);' – Sourabh