UITableView + Dodaj przesunięcie zawartości u góry

86

Muszę dodać puste miejsce w górnej części mojego UITableView, które nie wpływa na rozmiar obszaru zawartości. Przesuwanie zawartości w dół lub dodawanie pustej komórki NIE jest tym, co chcę zrobić. Zamiast tego chcę tylko przesunięcia.

W jaki sposób?

bluefloyd8
źródło

Odpowiedzi:

288

Nie jestem pewien, czy podążam za tobą, ale myślę, że mam te same kłopoty. W moim przypadku muszę dać trochę miejsca na ADBannerView u góry ekranu, więc to, co zrobiłem, było w metodzie viewDidLoad, którą dodałem:

[self.tableView setContentInset:UIEdgeInsetsMake(50,0,0,0)];

przyjmowane wartości to UIEdgeInsetsMake (góra, lewo, dół, prawo).

Alternatywnie to samo z Swift:

self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

Swift 4.2:

self.tableView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)
jigzat
źródło
1
Potrzebne było to, aby nie pokazywać komórki „ładującej” na górze, przełączać z powrotem do wstawki ego, gdy ta komórka jest renderowana, z powrotem do -50 na górę, gdy pojawia się reloadData. dzięki !
Daniel
23
Możesz również chcieć dostosować wskaźnik przewijania: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
bdev
8
Tak, a nawet lepiej, dostosuj wskaźnik przewijania w następujący sposób: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
David Hernandez,
5

Możesz dodać „pusty” widok nagłówka do tabeli ... dałoby to początkowy wygląd tabeli z przesunięciem, ale po rozpoczęciu przewijania przesunięcie by zniknęło. NIE jestem pewien, czy tego chcesz.

Jeśli potrzebujesz stałego odsunięcia i nie używasz jeszcze nagłówków sekcji, możesz utworzyć odsunięcie podobnie do powyższego, tworząc niestandardowe widoki dla nagłówków sekcji, zwłaszcza jeśli masz tylko jedną sekcję, może to dać wygląd stałego odsunięcia .

Mogę opublikować przykładowy kod, jeśli wygląda na to, że któryś z nich jest tym, czego szukasz.

scottbates22
źródło
4

Odpowiedź Jigzata połączyłem z:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 320, 1) animated:NO];

w

- (void)viewDidLoad

więc pierwsza komórka nie znajduje się na górze.

Richy
źródło
4

Swift 5.1

dodaj następujące elementy w viewDidLoad

tableView.contentInset.top = 100

Naprawdę to wszystko.

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.contentInset.top = 100
}
Rom4in
źródło
2

Wygląda na to, że chcesz owinąć „Widok” wokół swojego UITableView. Jeśli masz UITableViewControllerIB, UITableViewzostanie automatycznie ustawiony na viewz UITableViewController. Zmieniasz viewwłaściwość na normalną UIViewi dodajesz UITableViewtam swoje i nadajesz mu przesunięcie.

--- Edytuj --- Właśnie przeczytałem swój post i pomyślałem, że nie ma to sensu :) Kiedy tworzysz plik UITableViewController, dostajesz to (w pseudokodzie):

UITableViewController.view = UITableView

Oznacza to, że właściwy stół zajmie całą przestrzeń i nie można nawet dodawać innych widoków. Więc musisz zmienić

UITableViewController.view = UIView

i dodaj do tego swój stół UIView

willcodejavaforfood
źródło
0

Połączyłem tę odpowiedź z tą: https://stackoverflow.com/a/9450345/1993937

Aby tableView był wyświetlany u góry wstawki zawartości, więc miejsce na górze nie jest odcinane przez lekkie przewinięcie tableView w dół, gdy widok pojawia się początkowo. (18 to moja największa luka)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
TheJeff
źródło