UITableView + Agregar desplazamiento de contenido en la parte superior

86

Necesito agregar un espacio en blanco en la parte superior de mi UITableView que no afecta el tamaño del área de contenido. Cambiar el contenido hacia abajo o agregar una celda en blanco NO es lo que quiero hacer. En cambio, solo quiero una compensación.

¿Cómo?

bluefloyd8
fuente

Respuestas:

288

No estoy seguro si te estoy siguiendo, pero creo que estoy pasando por la misma situación. En mi caso, debo dar algo de espacio al ADBannerView en la parte superior de la pantalla, así que lo que hice fue en el método viewDidLoad que agregué:

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

los valores que toma son UIEdgeInsetsMake (arriba, izquierda, abajo, derecha).

Alternativamente lo mismo con Swift:

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

Rápido 4.2:

self.tableView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)
jigzat
fuente
1
Necesitaba esto para no mostrar una celda de "carga" en la parte superior, volver al recuadro de ego cuando se renderiza esa celda, volver a la parte superior -50 cuando ocurre reloadData. Gracias !
Daniel
23
Es posible que también desee ajustar el indicador de desplazamiento: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
bdev
8
Sí, o mejor aún, ajuste el indicador de desplazamiento así: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
David Hernandez
5

Puede agregar una vista de encabezado "vacía" a la tabla ... esto le daría la apariencia inicial de la tabla para tener un desplazamiento, pero una vez que comience a desplazarse, el desplazamiento desaparecerá. No estoy seguro de que sea eso lo que quieres.

Si necesita un desplazamiento permanente y aún no está utilizando encabezados de sección, puede crear el desplazamiento de manera similar a lo anterior haciendo vistas personalizadas para los encabezados de sección, especialmente si solo tiene una sección, esto podría darle la apariencia de un desplazamiento permanente .

Puedo publicar código de muestra si parece que alguno de esos es lo que está buscando.

scottbates22
fuente
4

Combiné la respuesta de Jigzat con:

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

en

- (void)viewDidLoad

por lo que la primera celda no está en la parte superior.

rico
fuente
4

Swift 5.1

agregue lo siguiente en viewDidLoad

tableView.contentInset.top = 100

Realmente eso es todo lo que hay que hacer.

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

Parece que desea envolver una 'Vista' alrededor de su UITableView. Si tiene un UITableViewControlleren IB UITableView, se establecerá automáticamente en el viewde UITableViewController. Cambia la viewpropiedad a una normal UIViewy agrega la UITableViewsuya allí y le da un desplazamiento.

--- Editar --- Acabo de leer mi publicación y pensé que tenía poco sentido :) Cuando creas una UITableViewController, obtienes esto (en pseudocódigo):

UITableViewController.view = UITableView

Esto significa que la tabla real ocupará todo el espacio y ni siquiera puede agregar otras vistas. Entonces necesitas cambiar el

UITableViewController.view = UIView

y agrega tu mesa a eso UIView

willcodejavaforfood
fuente
0

Combiné esta respuesta con esta: https://stackoverflow.com/a/9450345/1993937

Para hacer que tableView aparezca en la parte superior del recuadro de contenido, de modo que el espacio en la parte superior no se corte haciendo que tableView se desplace ligeramente hacia abajo cuando la vista aparece inicialmente. (18 es mi brecha superior)

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