UITableView + Adicionar deslocamento de conteúdo no topo

86

Preciso adicionar algum espaço em branco no topo do meu UITableView que não afeta o tamanho da área de conteúdo. Deslocar o conteúdo para baixo ou adicionar uma célula em branco NÃO é o que eu quero fazer. Em vez disso, quero apenas um deslocamento.

Quão?

bluefloyd8
fonte

Respostas:

288

Não tenho certeza se estou seguindo você, mas acho que estou tendo a mesma situação. No meu caso, devo dar algum espaço ao ADBannerView no topo da tela, então o que fiz foi no método viewDidLoad que adicionei:

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

os valores que leva são UIEdgeInsetsMake (superior, esquerdo, inferior, direito).

Alternativamente, o mesmo com 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
fonte
1
Isso é necessário para não mostrar uma célula "carregando" no topo, alterne de volta para a inserção do ego quando essa célula for renderizada, de volta ao topo -50 quando ocorrer reloadData. obrigado !
Daniel
22
Você pode querer ajustar o indicador de rolagem também: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
bdev
8
Sim, ou melhor ainda, ajuste o indicador de rolagem assim: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
David Hernandez
5

Você pode adicionar uma visão de cabeçalho "vazia" à tabela ... isso daria a aparência inicial da tabela com um deslocamento, mas assim que você começou a rolar, o deslocamento teria desaparecido. NÃO tenho certeza de que é isso que você quer.

Se você precisa de um deslocamento permanente e ainda não está usando cabeçalhos de seção, você pode criar o deslocamento semelhante ao anterior, fazendo visualizações personalizadas para os cabeçalhos de seção, especialmente se você tiver apenas uma seção, isso pode dar a você a aparência de um deslocamento permanente .

Posso postar um código de amostra se parecer que você está procurando algum deles.

scottbates22
fonte
4

Combinei a resposta de Jigzat com:

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

no

- (void)viewDidLoad

então a primeira célula não está no topo.

rico
fonte
4

Swift 5.1

adicione o seguinte em viewDidLoad

tableView.contentInset.top = 100

Realmente, é só isso.

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.contentInset.top = 100
}
Rom4in
fonte
2

Parece que você deseja envolver uma 'Visualização' em torno de seu UITableView. Se você tiver um UITableViewControllerem IB, o UITableViewserá automaticamente definido como viewde UITableViewController. Você altera a viewpropriedade para normal UIViewe adiciona seu UITableViewlá e dá um deslocamento.

--- Editar --- Acabei de ler minha postagem e achei que fazia pouco sentido :) Quando você cria um, UITableViewControllerobtém isto (em pseudo código):

UITableViewController.view = UITableView

Isso significa que a tabela real ocupará todo o espaço e você não pode nem mesmo adicionar outras visualizações. Então você precisa mudar o

UITableViewController.view = UIView

e adicione sua mesa a isso UIView

willcodejavaforfood
fonte
0

Combinei esta resposta com esta: https://stackoverflow.com/a/9450345/1993937

Para fazer com que tableView apareça na parte superior da inserção de conteúdo, de modo que o espaço na parte superior não seja cortado por ter a tableView rolada ligeiramente para baixo quando a visualização aparece inicialmente. (18 é a minha lacuna superior)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
TheJeff
fonte