IOS7: przesunięcie uiscrollview w UINavigationController
Obecnie migruję moją aplikację na ios 7 i utknąłem przez wiele godzin na nowym navigationcontroller / bar management.
Wcześniej, kiedy mieliśmy Kontroler nawigacyjny, mieliśmy taki fragment:
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];
W interface builder mieliśmy wybór, aby ustawić istniejący pasek nawigacyjny dla widoku i wszystko pasowało do zawartości rzeczywistego widoku.
OK więc teraz nie mam pojęcia jak poprawnie zaprojektować interfejs builder. Nadal mam swój fragment, aby zainicjować mój navcontroller. Jednak w kreatorze interfejsów dla mojego kontrolera MainViewController jeśli ustawiłem pasek stanu na półprzezroczysty lub nieprzezroczysty pasek nawigacyjny, mam przesunięcie 44px na górze(patrz poniżej).
Interface Builder_________________________i wynik
Teraz, jeśli ustawiłem pasek stanu na brak, nie ma przesunięcia na górze, ale ponieważ Widok na symulatorze jest mniejszy z powodu paska nawigacji, dół widoku w Interface builder jest wycięty wyłącz.
Interface Builder_________________________i wynik
Myślę, że naprawdę czegoś tu brakuje, ale nie mogę znaleźć żadnego tematu lub informacji o apple w Przewodniku iOS7 Transitions na ten temat.
Dzięki za pomoc
EDIT
Jak widać na zdjęciach, pierwszym potomkiem widoku jest UIScrollView, który zawiera obie etykiety, problem nie pojawia się, gdy nie ma widoku przewijania. Pojawia się również jeśli to UITableView. Jeśli etykieta znajduje się poza UIScrollView, nie ma przesunięcia tej etykiety.
8 answers
OK więc znalazłem rozwiązanie, ustawiłem w kontrolerze właściwość:
self.automaticallyAdjustsScrollViewInsets = false
Nie bardzo rozumiem prawdziwą zaletę tej właściwości, chociaż, (lub dlaczego wartość domyślna jest true)
Jedyną dokumentacją jaką znalazłem była tam:
- https://web.archive.org/web/20160405135605/https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html
- https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin
Update
W iOS 11 automaticallyAdjustsScrollViewInsets
jest przestarzały
Powinieneś teraz użyć:
self.tableView.contentInsetAdjustmentBehavior = .never
Zachęcam również do sprawdzenia to pytanie i jego odpowiedź, aby lepiej zrozumieć te właściwościWarning: 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-09-29 16:10:10
@ Justafinger odpowiedź działa jak urok dla mnie, jak również.
Chciałem tylko dodać, że to ustawienie można również łatwo dostosować z Buildera interfejsu.
- Wybierz kontroler widoku
- Kliknij kartę "Inspektor atrybutów"
- Usuń Zaznaczenie 'Dostosuj Wstawianie Widoku Przewijania' Smacznego!
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-10-25 21:05:49
Natknąłem się na ten sam problem, ale znalazłem dość dziwną właściwość na ViewController w interface builder, która wydaje się być przyczyną tego dla mnie. Istnieje zestaw pól wyboru "Rozszerz krawędzie". Usunąłem czek "Pod Top Bars" i wszystko zaczęło układać się prawidłowo dla mnie.
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-29 19:27:41
Z automaticallyAdjustsScrollViewInsets ustawionym na YES (ustawienie domyślne) występuje niedopasowanie w pozycjonowaniu scrollview między ios6 i ios7, więc aby były spójne, należy wyłączyć to ustawienie. Jednak ios6 ulegnie awarii, jeśli natknie się na automatically adjustsscrollviewinsets, więc albo musisz uzależnić programową zmianę automatically adjustsscrollviewinsets od ios7, albo wyłączyć opcję za pomocą storyboard / NIB
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-15 07:32:20
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 20:22:25
Ja również mam do czynienia z tym problemem.
UIScrollView
Rozmiar zawartości jest obliczany przez OS jako inne rozmiary, pochodzenie dostarczane przez system ograniczeń - dlatego OS ma wątpliwość.
Jak naprawić - powinieneś jawnie zdefiniować rozmiar zawartości UIScrollView
:
- Embed scrollable content to
UIView
(zmieniam nazwę naContentView
) - Dodaj ograniczenia:
ContentView.Weight = View.Weight
i ContentView.Height = View.Height
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:57:04
Wydaje się, że rozwiązaniem obejścia jest wyświetlenie pliku storyboard jako "iOS 6.1 i wcześniejsze" (wybierz plik storyboard - > Inspektor plików->dokument Buildera interfejsu- > Zobacz jako. Pozycjonowanie podwidywań w tym trybie pokazuje przesunięcie.
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-09-23 20:27:43
Dziękuję wam za rozwiązania! Godzinami starałem się rozwiązać problem. Wszystko było ok, gdy nie było paska nawigacyjnego zaangażowanych, ale poszło siwire w momencie, gdy osadzony ViewController w NavigationController.
Rozwiązałem to, odznaczając Dopasuj Wstawki widoku przewijania i pod górnym paskiem . Oba znajdują się w Inspektorze atrybutu ViewController. Wielkie dzięki!
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-10 07:11:23