Como alterar a altura do cabeçalho UITableView agrupado?

86

Eu sei como alterar a altura dos cabeçalhos de seção na visualização de tabela. Mas não consigo encontrar nenhuma solução para alterar o espaçamento padrão antes da primeira seção.

Agora eu tenho este código:

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

insira a descrição da imagem aqui

circuitolego
fonte
1
stackoverflow.com/questions/5441938/… Veja este link ...
Jitendra
@JitendraDeore Obrigado por me guiar na direção certa
circuitlego

Respostas:

216

Retorne em CGFLOAT_MINvez de 0 para a altura de seção desejada.

Retornar 0 faz com que UITableView use um valor padrão. Este é um comportamento não documentado. Se você retornar um número muito pequeno, obterá efetivamente um cabeçalho de altura zero.

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;
}
Mark Krenek
fonte
8
Em Swift, 'CGFLOAT_MIN' não está disponível: em vez disso, use CGFloat.min.
tounaobun
4
CGFloat.min causou um travamento, porque CGFloat.min retorna um valor negativo como -0,0000000000001
Pavel Gatilov
2
Talvez seja pedantismo, mas CGFloat.min não é um número muito pequeno, é um número negativo muito grande. Se você quisesse um número muito pequeno, usaria o épsilon.
alex bird
6
Em Swift 3 éCGFloat.leastNormalMagnitude
ixany
1
Conselho: Não use este valor estimatedHeightForHeaderInSection, o aplicativo irá travar.
Pedro Paulo Amorim
27

Se você usar o tableViewestilo agrupado , tableViewdefina automaticamente as inserções superior e inferior. Para evitá-los e evitar a configuração de inserções internas, use métodos de delegação para cabeçalho e rodapé. Nunca retorna 0.0 masCGFLOAT_MIN .

Objective-C

- (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
}
Jakub Truhlář
fonte
Além disso, tive que retornar nulo para viewForHeaderInSectionque o cabeçalho desaparecesse totalmente.
Dominik Seemayr
19

Parece que não consigo definir uma visualização do cabeçalho da tabela com altura de 0. Acabei fazendo o seguinte:

- (void)viewWillAppear:(BOOL)animated{
    CGRect frame = self.tableView.tableHeaderView.frame;
    frame.size.height = 1;
    UIView *headerView = [[UIView alloc] initWithFrame:frame];
    [self.tableView setTableHeaderView:headerView];
}
circuitolego
fonte
Seria melhor definir a altura aqui:- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 1.0f; }
uniruddh
17

Isso funcionou para mim com o Swift 4 . Modifique seu UITableViewexemplo em 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)))
FBente
fonte
13

Você pode tentar isto:

No loadView

_tableView.sectionHeaderHeight = 0;

Então

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

Deve ser removido, desde que você não tenha nenhum objeto no cabeçalho ...

E se você quiser algum tamanho do cabeçalho da seção, altere apenas o valor de retorno.

mesmo se você não conseguir remover o pé de seção.

_tableView.sectionFooterHeight = 0;

e

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

Bem, isso funciona para meus problemas com o tableview no iOS7.

Odd-Arne Dahle
fonte
3

Você deve remover o código self.tableView.tableHeaderView = [UIView new];após adicionar

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return CGFLOAT_MIN;
}
Chris Yim
fonte
É a footeraltura que está causando problema no meu caso. Obrigado pela ajuda.
pkc456
2

você pode usar viewForHeaderInSectione retornar uma vista com qualquer 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;
    }
}
Divyam shukla
fonte
Não estou perguntando sobre cabeçalhos de seção, mas o cabeçalho da tabela.
circuitlego
então você pode passar diretamente uma visão geral para a visão do cabeçalho da tabela.
Divyam shukla de
2

Em Swift 2.0

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

        return yourHeight
    }
George Asda
fonte
2

Em Swift 4

Remova o preenchimento superior extra em tableview agrupada.

Aqui, a altura é dada como 1 como altura mínima para o cabeçalho da seção porque você não pode dar 0, pois tableview tomará a margem superior padrão se a altura for atribuída a zero.

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

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

Exemplo 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;
Jaspe
fonte