Obecnie migruję moją aplikację na iOS 7 i godzinami utknąłem na nowym zarządzaniu kontrolerem nawigacji / paskiem.
Wcześniej, kiedy mieliśmy kontroler nawigacyjny, mieliśmy taki fragment:
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];
W narzędziu do tworzenia interfejsu mieliśmy możliwość ustawienia istniejącego paska nawigacji dla widoku i wszystko pasowało do zawartości rzeczywistego widoku.
OK, więc teraz nie mam pojęcia, jak prawidłowo projektować za pomocą konstruktora interfejsu. Nadal mam swój fragment do zainicjowania kontrolera navcontrollera. Jednak w konstruktorze interfejsu dla mojego MainViewController, jeśli ustawię pasek stanu na półprzezroczysty lub nieprzezroczysty pasek nawigacji, mam przesunięcie 44px na górze (patrz poniżej).
Interface Builder_________________________ I wynik
Teraz, jeśli ustawię pasek stanu na brak, nie ma przesunięcia na górze, ale ponieważ widok na symulatorze jest mniejszy z powodu paska nawigacji, dolna część widoku w konstruktorze interfejsu jest obcięta.
Interface Builder_________________________ I wynik
Wydaje mi się, że naprawdę czegoś mi brakuje, ale nie mogę znaleźć żadnego tematu ani informacji o Apple w Przewodniku przejścia na iOS7 na ten temat.
Dzięki za pomoc
EDYTOWAĆ
Jak widać na zdjęciach, pierwszym dzieckiem widoku jest UIScrollView, który zawiera obie etykiety, problem nie pojawia się, gdy nie ma scrollviewu. Pojawia się również, jeśli jest to UITableView. Jeśli etykieta znajduje się poza UIScrollView, nie ma przesunięcia do tej etykiety.
Odpowiedzi:
OK, więc znalazłem rozwiązanie, ustawiłem w kontrolerze właściwość:
Jednak tak naprawdę nie rozumiem prawdziwej korzyści z tej właściwości (lub dlaczego wartość domyślna jest prawdziwa)
Jedyna dokumentacja, jaką znalazłem, była tam:
Aktualizacja
W iOS 11
automaticallyAdjustsScrollViewInsets
jest przestarzałePowinieneś teraz użyć:
Zachęcam również do sprawdzenia tego pytania i odpowiedzi, aby lepiej poznać te właściwości
źródło
UIScrollView
przewijaniu. Ale bez tego nie mogę pozbyć się przesunięcia. Weired ...@ Odpowiedź Justafingera również działała na mnie jak urok.
Chciałem tylko dodać, że to ustawienie można również łatwo dostosować z poziomu kreatora interfejsu.
źródło
Miałem ten sam problem, ale znalazłem dość dziwną właściwość w ViewController w konstruktorze interfejsu, która wydaje się być przyczyną tego problemu. Istnieje zestaw pól wyboru „Rozszerz krawędzie”. Usunąłem zaznaczenie „Pod górnymi pasami” i wszystko zaczęło się układać prawidłowo.
źródło
Z automaticAdjustsScrollViewInsets ustawionym na YES (ustawienie domyślne) występuje niezgodność w pozycjonowaniu widoku scrollview między ios6 i ios7, więc aby były spójne, musisz wyłączyć to ustawienie. Jednak ios6 ulegnie awarii, jeśli pojawi się automatycznie AdjustsScrollViewInsets, więc musisz albo dokonać programowej zmiany w opcji automaticAdjustsScrollViewInsets w zależności od ios7, albo wyłączyć tę opcję za pomocą storyboardu / NIB
źródło
Miałem podobny problem, po odrzuceniu viewController, contentOffset z mojego tableView został zmieniony na (0, -64).
moje rozwiązanie było trochę dziwne, wypróbowałem wszystkie inne odpowiedzi, ale nie powiodło się, jedyną rzeczą, która rozwiązała mój problem, była zmiana pozycji tableView w drzewie kontrolek .xib
była to pierwsza kontrolka w widoku nadrzędnym w następujący sposób:
Przeniosłem tableView zaraz po ImageView i zadziałało:
wydaje się, że ustawienie widoku tabeli na pierwszej pozycji powodowało problem, a przeniesienie widoku tabeli na inną pozycję rozwiązało problem.
PD Nie używam autoLayout ani scenorysów
mam nadzieję, że to może komuś pomóc!
źródło
Ja też mam ten problem.
UIScrollView
rozmiar zawartości jest obliczany przez system operacyjny jako inne rozmiary, pochodzenie dostarczane przez system ograniczeń - dlatego system operacyjny ma wątpliwości.Rozwiązanie problemu - należy wyraźnie określić rozmiar zawartości
UIScrollView
:UIView
(zmieniam jej nazwę naContentView
)ContentView.Weight = View.Weight
iContentView.Height = View.Height
źródło
Wygląda na to, że rozwiązaniem obejścia problemu jest wyświetlenie pliku storyboardu jako „iOS 6.1 i starsze” (wybierz plik storyboardu-> Inspektor plików-> Dokument kreatora interfejsu-> Wyświetl jako. Pozycjonowanie podglądów podrzędnych w tym trybie pokazuje przesunięcie.
źródło
Dziękuję wam za rozwiązania! Zmagałem się godzinami, próbując rozwiązać problem. Wszystko było w porządku, gdy nie było zaangażowanego paska nawigacyjnego, ale poszło źle w momencie, gdy osadziłem ViewController w NavigationController.
Rozwiązałem to, usuwając zaznaczenie opcji Dopasuj wstawki widoku przewijania i Pod górnymi paskami . Oba znajdują się w inspektorze atrybutów ViewController. Stukrotne dzięki!
źródło