Reducción del espacio entre secciones de UITableView


141

¿Hay alguna manera de reducir el espacio entre dos secciones de un UITableView? Hay aproximadamente 15 píxeles entre cada sección que tengo. Ya intenté devolver 0 para -tableView:heightForFooterInSection:y -tableView:heightForHeaderInSection:pero eso no cambia nada.

¿Alguna sugerencia?


1
Estaba usando un tableView agrupado y estableciendo la altura del encabezado / pie de página en 0.0. Pero mostraba un área gris con una altura (predeterminada) de 30 puntos. El uso no 0.0está aceptado. debe usar cualquier valor anterior, 0.0por ejemplo 0.0001.
Miel

Como @Honey dice 0.0que no funciona. Tengo una respuesta más completa para el mismo problema aquí: stackoverflow.com/a/22185534/2789144
James Nelson

Respuestas:


263

Fue un poco complicado, pero prueba este código:

- (CGFloat)tableView:(UITableView*)tableView 
           heightForHeaderInSection:(NSInteger)section {
    if (section == 0) {
        return 6.0;
    }

    return 1.0;
}

- (CGFloat)tableView:(UITableView*)tableView 
           heightForFooterInSection:(NSInteger)section {
    return 5.0;
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForHeaderInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

Cambiar los valores en consecuencia. Para eliminar el espacio, creo que 0.0 no será aceptado. El valor cuerdo más pequeño parece ser 1.0.


2
Debería devolver 5.0f en lugar de 5.0, debido a conflictos de doble flotación
LeonS

45
Incluso puede devolver 0.00001f como altura y obtendrá una altura de 0 píxeles / puntos.
Klaas

1
Como señala @Klass, no puede usarlo 0como la altura: obtendrá la altura predeterminada.
zekel

26
¿Por qué no usar CGFLOAT_MIN? Está hecho para este tipo de escenarios :)
Andrei Filip

12
Si usa swift, puede regresarCGFloat.leastNonzeroMagnitude
oztune

140

Para todos los que quieran reducir la distancia a 0, deben usar:

tableView.sectionHeaderHeight = 0.0;
tableView.sectionFooterHeight = 0.0;

Porque la publicación de UITableViewDelegate solo tiene un efecto a partir de flotantes mayores que cero.

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    return 1.0;
}


-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
    return 1.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

(usando iOS 4.1 con XCode 4.0.2)


77
devuelve 0,0001; esta trabajando para mi Estoy usando xcode 4.6 y iOS 6.1
Sam

Solo necesito devolver CGFLOAT_MIN en los dos primeros métodos y funciona bien.
Julius

en lugar de 0 usoreturn .leastNormalMagnitude
stan

33

En realidad, puede establecer las alturas de pie de página / encabezado / celda en Interface Builder en la pestaña de tamaño. De forma predeterminada, el encabezado / pie de página se establece en 10.0.


Creo que ese comportamiento se agregó en iOS 5.0 o iOS 6.0, pero sí, ahora es mucho más fácil configurar la distancia entre grupos.
Vlas Voloshin

2
Sé que esto es antiguo, pero quería comentar que a partir de XCode 5 e iOS 7, parece que esto TIENE que hacerse en código. Lo configuré en el generador de interfaces en 0 y todavía estaba configurado en 1 hasta que lo configuré en el código 0.
Ahmad

Con Xcode 6 y iOS 8 parece estar funcionando solo con la configuración en el guión gráfico.
Murray Sagal

están configurados en 18 en xcode 7 de forma predeterminada. ¡Pero esa es, con mucho, la solución más fácil!
static0886

27

Debe reducir la altura del encabezado / pie de sección. Entonces el espacio entre secciones se reducirá.

prueba este código

Esto funciona para mi :-)

tableView.sectionHeaderHeight = 2.0;
tableView.sectionFooterHeight = 2.0;

21

También puede reducir la altura del pie de página y el encabezado de la sección desde el guión gráfico. En la vista de tabla -> inspector de tamaño. Ir a la altura de la sección.

Inspector de tamaño para UITableView en storyboard.

De forma predeterminada, se establece en 22 para la tabla de estilo simple y 10 para la tabla de estilo agrupada. Puede configurar valores aumentando / disminuyendo los valores para encabezado y pie de página por separado.


6

Para mí, el problema era porque estaba usando un estilo de vista de tabla agrupada ( UITableViewStyleGrouped). Cuando lo cambié a un estilo simple ( UITableViewStylePlain), mi tableView:heightForHeaderInSection:método fue lo único que determinó el tamaño de cada encabezado de sección.


4

Use esto quizás, 0 no funcionará como se esperaba

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
     return .leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

3

ACTUALIZACIÓN PARA iOS7: debido a la actualización automática de ARC, aquí está editado el código de @Martin Stolz.

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return 6;
    return 1.0;
}

-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
    return 5.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

(Usando iOS7, Xcode v5.0)


0

Para mí, este problema se resolvió simplemente usando el siguiente código,

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return section == 0 ? 1 : 20 // 20 is my other sections height
}

Devolver 1 para la primera sección ha resuelto el problema.


0

Para cambiar el espacio de encabezado / pie de página, se deben implementar los siguientes métodos :

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

Y

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat

(use los métodos correspondientes para cambiar la altura del pie de página)

El siguiente código elimina completamente los espacios alrededor de las secciones:

public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}

public func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.