Czy komórki UITableView
pokazu wyświetlają się w pustym miejscu podczas przewijania w dół?
Jeśli tak, przyczyną problemu może być wstawka dodana do elementu z UITableView
powodu kontrolera nawigacji, który masz w widoku. Wstawka jest dodawana do widoku tabeli, aby zawartość została umieszczona poniżej paska nawigacji, gdy nie nastąpiło przewijanie. Gdy tabela jest przewijana, jej zawartość jest przewijana i wyświetlana pod przezroczystym paskiem nawigacyjnym. To zachowanie jest oczywiście pożądane tylko wtedy, gdy widok tabeli rozpoczyna się bezpośrednio pod paskiem nawigacji, co nie ma miejsca w tym przypadku.
Inną rzeczą, na którą należy zwrócić uwagę, jest to, że iOS dostosowuje wstawkę zawartości tylko dla pierwszego widoku w hierarchii widoków, jeśli jest UIScrollView
lub jest to element podrzędny (np. UITableView
I UICollectionView
). Jeśli hierarchia widoków obejmuje wiele widoków przewijania, automaticallyAdjustsScrollViewInsets
dostosuje tylko pierwszy.
Oto jak zmienić to zachowanie:
a) Konstruktor interfejsu
- Wybierz kontroler widoku
- Otwórz inspektora atrybutów
W inspektorze atrybutów IB (gdy wybrany jest kontroler widoku) istnieje właściwość o nazwie „Dopasuj wstawki widoku przewijania”, która jest domyślnie włączona. Odznacz tę opcję:
(Zdjęcie dzięki uprzejmości Dheeraj D )
Nie jestem pewien, która wersja Xcode wprowadziła tę opcję (nie zauważyłem jej w informacjach o wydaniu), ale jest ona przynajmniej dostępna w wersji 5.1.1.
Edycja: aby uniknąć nieporozumień, była to trzecia opcja wymieniona w komentarzach
b) Programowo
Dodaj to do ie viewDidLoad
( podziękowania dla odpowiedzi Slavco Petkovskiego i komentarza Cris R )
// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;
// Swift
self.automaticallyAdjustsScrollViewInsets = false
c) Może to mieć znaczenie dla starszych uczniów
Możesz to naprawić, dodając
tableView.contentInset = UIEdgeInsetsZero
//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero
Lub jeśli używasz IB i pasek nawigacji nie jest przezroczysty (nie można tego stwierdzić na zrzucie ekranu)
- Wybierz kontroler widoku
- Otwórz inspektora atrybutów
- W widoku Opcje kontrolera w sekcji Rozszerz krawędzie usuń zaznaczenie opcji „Pod górnymi paskami”
Miałem ten sam problem i jestem prawie pewien, że w pewnym momencie miałem tam UIView. Po prostu skopiowanie całego widoku tabeli, usunięcie go i ponowne wklejenie go naprawiło.
źródło
Wybierz widok tabeli w swoim scenorysie i upewnij się, że styl jest ustawiony na „Zwykły” zamiast „Zgrupowane”. Możesz znaleźć to ustawienie w zakładce Inspektor atrybutów.
źródło
W moim przypadku miałem UILabel w hierarchii widoku UITableView.
Przesunąłem go „do przodu” i pojawiła się pusta przestrzeń. Nie jestem pewien dlaczego, ale działa tak, jeśli coś jest pod tableView, ukrywa puste miejsce.
Możesz także spróbować zaznaczyć / odznaczyć opcję „Dopasuj wstawki widoku przewijania” w inspektorze kontrolera widoku w scenorysie.
źródło
ŻADNE z powyższych nie pomogło mi. ale zrobienie tego pomogło :
zamiast „-64” możesz wpisać dowolną inną liczbę w zależności od wysokości paska nawigacji.
źródło
Może być wstępnie dodane
UIRefreshControl
. Mam taki problem z kodem:Jak widzisz,
self.refreshController
zaraz potem usiadłeminit
Ale jeśli ustawisz
refreshControl
po konfiguracji, górna przestrzeń nie będzie ci przeszkadzać.źródło
Jeśli robisz to na iOS 11, automaticAdjustsScrollViewInsets nie będzie działać, ponieważ jest przestarzały, następujący kod zadziałał dla mnie zgodnie z odpowiedzią w tym poście: https://stackoverflow.com/a/44391269/5476481
Mam nadzieję że to pomoże.
źródło
W Storyboard ustaw
contentInsets
swójtableview
na Nigdyźródło
Nie mogę powiedzieć na pewno, ale wygląda na to, że masz dodatkowy widok UIV, który utknął między miejscem, w którym zaczynają się komórki prototypu, a górą UITableView. Mój obraz wygląda dokładnie tak jak twój, jeśli usuniesz tekst / linie, które dodałem.
źródło
Nadal nie jestem pewien, co spowodowało to dodatkowe miejsce na górze, ale odkryłem, że usunięcie UITableView z spacją i zastąpienie go nowym zajęło to miejsce.
Musiałem przypadkowo przeciągnąć tam UIView, ale nie mogłem go wybrać, więc nie mogłem usunąć.
źródło
Szybki 5
Spróbuj z usunięciem tableHeaderView i tableFooterView
źródło
Sprawdź ramkę widoku tabeli w Storyboard lub XIB. Mój domyślnie ma wartość pozycji y, stąd błąd
źródło
W mojej aplikacji również miałem taki problem. Ustawiłem wstawkę górnej krawędzi tableView zero. Próbowałem także ustawić
false
dlaautomaticallyAdjustsScrollViewInsets
. Ale nie zadziałało.Wreszcie dostałem działające rozwiązanie. Nie wiem, czy to właściwy sposób. Ale implementacja
heightForHeaderInSection
metody delegata zadziałała. Aby to zadziałało, musisz zwrócić wartość niezerową (zwrócone zero wyświetli tę samą spację co poprzednio).źródło
W 2017 roku działa dla mnie po prostu ta jedna linia
navigationController? .navigationBar.isTranslucent = false
Nie mam pojęcia, dlaczego to w ogóle miało na to wpływ. Może ktoś mógłby to wyjaśnić. Ale jestem prawie pewien, że to odpowiedź, której szukałaby większość ludzi.
źródło
W iOS 11 i nowszych Apple zmieniło właściwość, aby dostosować wstawkę zawartości. Zastosowanie
contentInsetAdjustmentBehavior
i ustawić.never
, aby usunąć dodatkową przestrzeń powyżejUICollectionView
,UIScrollView
,UITableView
.Mam nadzieję, że to Ci pomoże.
źródło
Cóż, dla mnie problem pojawił się, gdy przeciągnąłem komórkę prototypu z menu do widoku tabeli. Więc usunąłem to i po prostu ustawiłem komórkę prototypu na 1 we właściwościach inspektora widoku tabeli
źródło
Robię to programowo i po prostu przeniosłem mój addSubview (tableView) na dół po dodaniu wszystkich moich innych podglądów podrzędnych i rozwiązałem mój problem!
Nie jestem pewien, dlaczego pojawia się to tylko na urządzeniu, a nie w moim symulatorze, ale tak czy inaczej jest przynajmniej proste rozwiązanie!
źródło
Dopóki UITableView nie jest pierwszym widokiem podrzędnym kontrolera widoku, puste miejsce nie pojawi się.
Rozwiązanie: Dodaj ukryty / wyraźny obiekt widoku (widoki, etykiety, przycisk itp.) Jako pierwszy widok podrzędny kontrolera widoku (na tym samym poziomie co widok UITableView, ale przed nim).
źródło
UIView można wstawić na górze i na dole tabeli (przeciągnij i upuść). Ustaw ich właściwości jako przezroczyste i wysokość 1 piksela. Ma to na celu usunięcie dodatkowej wyściółki z przodu komórek.
źródło
Miałem też ten problem, bo tableView nie był ostatnim widokiem w hierarchii. W moim przypadku miałem widok powyżej (mimo że nie zachodziły na siebie), więc przeciągnąłem go nad tableView w hierarchii i to sprawiło, że tak.
źródło
Właśnie znalazłem na to rozwiązanie.
Po prostu wybierz widok tabeli i kliknij Edytor -> Rozmieść -> Wyślij na wierzch
To zadziałało dla mnie i mam nadzieję, że pomoże wam wszystkim.
źródło
W moim przypadku użyłem ContainerViewController i umieściłem w nim UITableViewController. Po usunięciu ContainerViewController. Problemy znikają.
źródło
Błąd Xcode 8…
Spróbuj tego najpierw, jeśli styl Storyboard UITableView jest ustawiony na Plain.
Ustaw styl tabeli na Zgrupowane, a następnie z powrotem na Zwykły. Spowodowało to usunięcie miejsca w mojej aplikacji na czele mojego UITableView.
źródło
W moim przypadku korzystałem z widoku kontenera. (Widok główny -> Widok Contaner -> UITableView)
Wydaje mi się, że dodatkowa przestrzeń u góry przypomina obszar paska powiadomień urządzenia (gdzie wyświetlany jest czas, bateria). Naprawdę, to nie jest założenie.
To, co zrobiłem, pochodziło z UI Builder:
źródło
Możesz użyć tego kodu do viewDidLoad lub viewDidAppear w miejscu tworzenia tabeli:
źródło
I just found a solution for this. In my case, i was using TabBarViewController, A just uncheck the option 'Adjust Scroll View Insets'. Issues goes away.
https://i.stack.imgur.com/vRNfV.pngźródło
ustaw Rozszerzone krawędzie ViewControllera w scenorysie, tak aby
underTopBar
właściwość nie była zaznaczona.źródło
Miał ten sam problem. Rozwiązałem to, dodając następujący element do viewDidLoad.
źródło
Ustaw wstawki zawartości na zero:
źródło
sprawdzić
źródło