Po aktualizacji do Xcode 5 paski nawigacyjne we wszystkich widokach mojej aplikacji zostały przesunięte w dół. Oto kilka zrzutów ekranu, pierwszy pokazujący wszystko w widoku, gdy jest on rozebrany, a drugi pokazujący wszystko nietknięte. Pasek wyszukiwania powinien zaczynać się w miejscu paska nawigacji.
Czy ktoś wie, jak mogę to naprawić?
edycja: próbowałem tego wcześniej zalecenie:
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
Ale daje to bardzo dziwne wyniki.
Może to być spowodowane tym, że pod tym kontrolerem widoku mam „menu przesuwne”, które pojawia się z powodu przezroczystości paska nawigacji.
ios
objective-c
ios7
uinavigationbar
uistatusbar
Sam D20
źródło
źródło
Odpowiedzi:
Ustaw przezroczystą właściwość paska nawigacji na NIE :
Spowoduje to usunięcie ramki widoku pod paskiem nawigacji i paskiem stanu.
Jeśli musisz pokazać i ukryć pasek nawigacji, użyj
w swojej
viewDidLoad
metodzie.źródło
viewDidLoad
ale nie przynosi to żadnych zmian.W
iOS 7
przy domyślnych cała właściwość półprzezroczystości kontrolera ma wartość TAK, dlatego ustawiono właściwość przezroczystości NIE dla tego problemu.źródło
Możesz wyłączyć "Rozszerz krawędzie" w Inspektorze atrybutów kontrolera widoku tego ekranu (jak pokazano na poniższym obrazku):
źródło
Działa to również szybko na iOS 8.1
źródło
Jeśli chcesz zachować przezroczystość na swoim
navigationBar
, na końcu swojegoviewDidLoad
lub w swoim,viewWillAppear
dodaj następujący wiersz kodu:W jakiś sposób, jeśli twoja
scrollView
podklasa (UITableView
,UICollectionView
itp.) Jest naindex
0 w twoim bieżącym widokusubviews
, automatycznie dostosuje wstawki zgodnie z twoimnavigationBar
. Nie powinno też wpływać na interfejs użytkownika w wersjach wcześniejszych niż iOS7.EDYCJA Jeśli inicjalizujesz
UITableView
programowo, najlepiej jest dodać go do widoku za pomocą tego[self.view insertSubview:self.tableView atIndex:0];
źródło
[self.view insertSubview:self.tableView atIndex:0];
zamiast wysyłać go na koniec po dodaniu.Swift 4 :
Ustaw następujący wiersz kodu w metodzie viewDidLoad:
źródło
Możesz dodać tę metodę do kontrolera widoku, jak pokazano na tym adresie URL :
źródło
Innym podejściem jest ustawienie
self.automaticallyAdjustsScrollViewInsets = YES;
na kontrolerze widoku. Jest to domyślnie włączone. Ale w twoim przypadku:Widzę, że używasz EGORefreshHeaderView. Odgrywa z contentInset z UITableView. Więc kiedy go zwolnisz, nagłówek zresetuje górną wstawkę zamiast przywracać poprzednią wartość.
źródło
Jeśli chcesz mieć pełną kontrolę nad widokami i uniknąć błędnych dostosowań systemu iOS, podklasę UITableView i dostosuj wstawki (zarówno przewijanie, jak i wskaźniki) w - (void) willMoveToWindow: (UIWindow *) newWindow. Pracuje dla mnie.
źródło
Inną opcją jest otwarcie pliku Info.plist w trybie kodu źródłowego i wprowadzenie następujących informacji:
Mam nadzieję że to pomoże.
źródło