¿Cómo cambiar la altura del encabezado UITableView agrupado?


88

Sé cómo cambiar la altura de los encabezados de las secciones en la vista de tabla. Pero no puedo encontrar ninguna solución para cambiar el espaciado predeterminado antes de la primera sección.

Ahora mismo tengo este código:

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

ingrese la descripción de la imagen aquí



@JitendraDeore Gracias por guiarme en la dirección correcta
circuitlego

Respuestas:


219

Regrese en CGFLOAT_MINlugar de 0 para la altura de sección deseada.

Devolver 0 hace que UITableView use un valor predeterminado. Este es un comportamiento indocumentado. Si devuelve un número muy pequeño, efectivamente obtiene un encabezado de altura cero.

Swift 3:

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

Rápido:

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 0 {
        return CGFloat.min
    }
    return tableView.sectionHeaderHeight
}

Obj-C:

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

8
En Swift, 'CGFLOAT_MIN' no está disponible: use CGFloat.min en su lugar.
tounaobun

4
CGFloat.min provocó un bloqueo, porque CGFloat.min devuelve un valor negativo como -0.0000000000001
Pavel Gatilov

2
Quizás esto sea pedantería, pero CGFloat.min no es un número muy pequeño, es un número negativo muy grande. Si quisiera un número muy pequeño, usaría épsilon.
Alex Bird

6
En Swift 3 esCGFloat.leastNormalMagnitude
ixany

1
Aviso: no utilice este valor estimatedHeightForHeaderInSection, la aplicación se bloqueará.
Pedro Paulo Amorim

27

Si usa tableViewestilos agrupados , tableViewconfigure automáticamente las inserciones superior e inferior. Para evitarlos y evitar la configuración de inserciones internas, use métodos delegados para el encabezado y el pie de página. Nunca devuelva 0.0 peroCGFLOAT_MIN .

C objetivo

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

Rápido

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}

Además, tuve que devolver nil para viewForHeaderInSectionque el encabezado desapareciera por completo.
Dominik Seemayr

19

Parece que no puedo establecer una vista de encabezado de tabla con una altura de 0. Terminé haciendo lo siguiente:

- (void)viewWillAppear:(BOOL)animated{
    CGRect frame = self.tableView.tableHeaderView.frame;
    frame.size.height = 1;
    UIView *headerView = [[UIView alloc] initWithFrame:frame];
    [self.tableView setTableHeaderView:headerView];
}

Esto sería mejor establecer la altura aquí:- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 1.0f; }
uniruddh

19

Esto funcionó para mí con Swift 4 . Modifica tu UITableVieweg en viewDidLoad:

// Remove space between sections.
tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0

// Remove space at top and bottom of tableView.
tableView.tableHeaderView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))
tableView.tableFooterView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))

1
Salvavidas, gracias por tomarse el tiempo de mencionarlo aquí :)
user2672052

13

Puedes probar esto:

En el loadView

_tableView.sectionHeaderHeight = 0;

Entonces

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

Debe eliminarse siempre que no tenga ningún objeto en el encabezado ...

Y si desea algún tamaño del encabezado de sección, cambie solo el valor de retorno.

lo mismo si no se quita el pie de sección.

_tableView.sectionFooterHeight = 0;

y

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

Bueno, esto funciona para mis problemas con la vista de tabla en iOS7.


3

Debes eliminar el código self.tableView.tableHeaderView = [UIView new];después de agregar

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

Es la footeraltura la que está causando problemas en mi caso. Gracias por la ayuda.
pkc456

2

puede usar viewForHeaderInSectiony devolver una vista con cualquier altura.

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{

    int height = 30 //you can change the height 
    if(section==0)
    {
       UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, height)];

       return view;
    }
}

No estoy preguntando por los encabezados de sección, sino por el encabezado de la tabla.
Circuitlego

luego puede pasar directamente A uiview a la vista del encabezado de la tabla.
Divyam shukla

2

En Swift 2.0

func tableView(tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {

        return yourHeight
    }

2

En Swift 4

Elimine el relleno superior adicional en la vista de tabla agrupada.

Aquí la altura se da 1 como altura mínima para el encabezado de la sección porque no puede dar 0 ya que la vista de tabla tomará el margen superior predeterminado si se le asigna una altura cero.

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

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

0

Ejemplo de viewForHeaderInSection:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 118)];
view.backgroundColor = COLOR_DEFAULT;

NSString* key = [self.tableKeys objectAtIndex:section];
NSArray *result = (NSArray*)[self.filteredTableData objectForKey:key];
SZTicketsResult *ticketResult = [result objectAtIndex:0];

UIView *smallColoredView = [[UIView alloc] initWithFrame:CGRectMake(0, 5, 320, 3)];
smallColoredView.backgroundColor = COLOR_DEFAULT_KOSTKY;
[view addSubview:smallColoredView];

UIView *topBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 8, 320, 40)];
topBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:topBackgroundView];

UILabel *totalWinnings = [[UILabel alloc] initWithFrame:CGRectMake(10, 8, 300, 40)];
totalWinnings.text = ticketResult.message;
totalWinnings.minimumFontSize = 10.0f;
totalWinnings.numberOfLines = 0;
totalWinnings.backgroundColor = [UIColor clearColor];
totalWinnings.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:totalWinnings];

UIView *bottomBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 55, 320, 58)];
bottomBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:bottomBackgroundView];

UILabel *numberOfDraw = [[UILabel alloc] initWithFrame:CGRectMake(10, 55, 290, 58)];
numberOfDraw.text = [NSString stringWithFormat:@"sometext %@",[ticketResult.title lowercaseString]];;
numberOfDraw.minimumFontSize = 10.0f;
numberOfDraw.numberOfLines = 0;
numberOfDraw.backgroundColor = [UIColor clearColor];
numberOfDraw.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:numberOfDraw];

return view;
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.