UITableView + Добавить смещение содержимого вверху

86

Мне нужно добавить пустое пространство в верхнюю часть моего UITableView, которое не влияет на размер области содержимого. Сдвиг содержимого вниз или добавление пустой ячейки - это НЕ то, что я хочу делать. Вместо этого я просто хочу смещение.

Как?

bluefloyd8
источник

Ответы:

288

Я не уверен, что слежу за тобой, но думаю, что у меня такое же затруднительное положение. В моем случае я должен выделить немного места для ADBannerView в верхней части экрана, поэтому то, что я сделал, было в добавленном мной методе viewDidLoad:

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

значения, которые он принимает, - это UIEdgeInsetsMake (вверху, слева, внизу, справа).

В качестве альтернативы то же самое со Swift:

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

Swift 4.2:

self.tableView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)
джигзат
источник
1
Это необходимо для того, чтобы не отображать «загружающую» ячейку вверху, переключаться обратно на вставку эго, когда эта ячейка отображается, обратно на -50 вверху, когда происходит reloadData. Благодарность !
Даниэль
23
Вы также можете настроить индикатор прокрутки: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
bdev
8
Да, а еще лучше, настройте индикатор прокрутки следующим образом: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
Дэвид Эрнандес
5

Вы можете добавить к таблице «пустой» заголовок ... это даст первоначальный вид таблицы со смещением, но как только вы начнете прокрутку, смещение исчезнет. НЕ уверен, что вы этого хотите.

Если вам нужно постоянное смещение и вы еще не используете заголовки разделов, вы можете создать смещение, как описано выше, создав пользовательские представления для заголовков разделов, особенно если у вас только один раздел, это может дать вам вид постоянного смещения. .

Я могу опубликовать образец кода, если он похож на то, что вы ищете.

Скоттбейтс22
источник
4

Я объединил ответ Джигзата с:

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

в

- (void)viewDidLoad

поэтому первая ячейка не наверху.

богатый
источник
4

Swift 5.1

добавьте следующее в viewDidLoad

tableView.contentInset.top = 100

На самом деле это все, что нужно сделать.

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.contentInset.top = 100
}
Rom4in
источник
2

Похоже, вы хотите обернуть «Просмотр» вокруг своего UITableView. Если у вас есть UITableViewControllerIB UITableView, автоматически будет установлено значение viewof UITableViewController. Вы меняете viewсвойство на нормальное, UIViewдобавляете UITableViewтуда свое и даете ему смещение.

--- Изменить --- Я только что прочитал свой пост и подумал, что это не имеет особого смысла :) Когда вы создаете, UITableViewControllerвы получаете это (в псевдокоде):

UITableViewController.view = UITableView

Это означает, что фактическая таблица займет все пространство, и вы даже не сможете добавить другие представления. Итак, вам нужно изменить

UITableViewController.view = UIView

и добавьте свою таблицу к этому UIView

willcodejavaforfood
источник
0

Я объединил этот ответ с этим: https://stackoverflow.com/a/9450345/1993937

Чтобы tableView отображался в верхней части вставки содержимого, чтобы пространство наверху не обрезалось, если tableView слегка прокручивается вниз при первоначальном появлении представления. (18 - мой главный пробел)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
Джефф
источник