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?

flohei
fuente
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.

Para hombres
fuente
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)

Martin Stolz
fuente
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.

Chris
fuente
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;
Jirune
fuente
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.

iosCurator
fuente
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.

Liron Yahdav
fuente
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
}
Stan
fuente
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)

Chisx
fuente
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.

Bharat
fuente
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
}
Murlakatam
fuente