iOS 7-navigationController ustawia contentInset i ContentOffset mojego UIScrollView
Mam UIScrollView (właściwie UICollectionView, ale to chyba nie ma znaczenia). Gdy pojawi się w systemie IOS 7, Kontroler nawigacyjny ustawia jego contentInset i contentOffset na wartości, których nie chcę. Wydaje się, że próbuje dostosować pasek stanu i pasek nawigacji. Wolałabym zostawić ich samych. Naprawiłem to, nadpisując metody getter i setter dla contentInset i contentOffset, z flagą, która mówi obiektowi, czy powinien zaakceptować zestaw. Ale czy jest lepszy sposób?
7 answers
Spróbuj ustawić self.automaticallyAdjustsScrollViewInsets = NO
w głównym kontrolerze widoku.
Zostało to wprowadzone w iOS 7
, więc możesz chcieć to zawinąć za pomocą sprawdzania wersji iOS, jeśli obsługujesz iOS 6
i poniżej.
Update
Jeśli używasz storyboardów, możesz to zrobić w Kreatorze interfejsów, a także sprawdzając 'Adjust Scroll View Insets'
dla wybranego kontrolera.
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-08 02:24:21
Miałem podobny problem, po odrzuceniu kontrolera viewController, contentOffset z mojego tableView został zmieniony na (0, -64).
Moje rozwiązanie było trochę dziwne, próbowałem wszystkich innych odpowiedzi, ale nie odniosłem sukcesu, jedyną rzeczą, która naprawiła mój problem było przełączenie pozycji tableView w drzewie kontrolek .xib
Była to pierwsza kontrolka w widoku nadrzędnym w ten sposób:
Przeniosłem tableView zaraz po ImageView i to "przepracowany": {]}
Wydaje się, że umieszczenie widoku tabeli na pierwszej pozycji powodowało problem, a przesunięcie widoku tabeli na inną pozycję rozwiązało problem.
P. D. nie używam autoLayout ani storyboardów
Mam nadzieję, że to może komuś pomóc!
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-04-11 19:33:26
Mam dwa rozwiązania:
1.
self.view = scrollView;
2.
[self.navigationController.toolbar setTranslucent:NO];
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-01-27 08:19:14
Mam ten sam problem.
Ustawienie
self.automaticallyAdjustsScrollViewInsets = NO
rozwiązało problem dla niektórych widoków, ale nie wszędzie.-
Drugim rozwiązaniem jest ustawienie przesunięcia zawartości tableview/view / scrollview w viewWillLayoutSubviews:
- (void)viewWillLayoutSubviews { //Arrange the view CGRect tempViewFrame = self.view.frame; if (tempViewFrame.origin.y == 64.0f) { tempViewFrame.origin.y = 0; self.view.frame = tempViewFrame; } }
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-25 09:02:24
To wystarczy
- (void)viewDidLoad {
[super viewDidLoad];
self.automaticallyAdjustsScrollViewInsets = NO;
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-22 17:00:12
To rozwiązuje problem w obu przypadkach, gdy:
- Wyświetlanie Paska Stanu
-
Wyświetlanie Paska Stanu + Paska Nawigacji
override func viewDidLayoutSubviews() { NSLog("ORIGIN: \(self.view.frame.origin.y)") if self.view.frame.origin.y == 0 { if let rect = self.navigationController?.navigationBar.frame { let y = rect.size.height + rect.origin.y self.tableView.contentInset = UIEdgeInsetsMake(y, 0, 0, 0) } } else if self.view.frame.origin.y == 44 || self.view.frame.origin.y == 64 { self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0) } }
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-07-04 18:34:48
Inne odpowiedzi mogą zadziałać na ciebie, ale nie zadziałały na mnie. Zadziałało dla mnie Ręczne Ustawienie y
Właściwości contentOffset
w viewDidLayoutSubviews
i viewWillAppear
:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Set the offset to go below the status bar
collectionView.contentOffset.y = -UIApplication.shared.statusBarFrame.height
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Set the offset to go below the status bar
collectionView.contentOffset.y = -UIApplication.shared.statusBarFrame.height
}
W moim przypadku, mój kontroler miał widok kolekcji potomnych, który czasami dostałby contentOffset
skorygowany, a innym razem nie. Sposób, w jaki go znormalizowałem, polegał na ręcznym dostosowywaniu go za każdym razem. Chciałem, aby zawartość była przesunięta poniżej paska stanu, więc użyłem wysokości paska stanu jako wartości (ujemnej, ponieważ chcę treść do zepchnięcia w dół).
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
2017-07-25 14:51:26