95 votes

Comment modifier la hauteur de l'en-tête d'un UITableView groupé ?

Je sais comment modifier la hauteur des en-têtes de section dans la vue tableau. Mais je ne trouve pas de solution pour modifier l'espacement par défaut avant la première section.

Actuellement, j'ai ce code :

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

enter image description here

225voto

Mark Krenek Points 249

Retourner à CGFLOAT_MIN au lieu de 0 pour la hauteur de section souhaitée.

En retournant 0, UITableView utilise une valeur par défaut. Ceci est comportement non documenté. Si vous renvoyez un très petit nombre, vous vous obtenez effectivement un en-tête de hauteur nulle.

Swift 3 :

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

Swift :

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;
}

31voto

Jakub Truhlář Points 7104

Si vous utilisez tableView style groupé , tableView définit automatiquement les inserts supérieurs et inférieurs. Pour les éviter et éviter la définition interne des inserts, utilisez des méthodes de délégation pour l'en-tête et le pied de page. Ne jamais retourner 0.0 mais CGFLOAT_MIN .

Objectif-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;
}

Swift

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
}

26voto

FBente Points 1206

Cela a fonctionné pour moi avec Swift 4 . Modifiez votre UITableView Par exemple, dans 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)))

19voto

circuitlego Points 570

Il semble que je ne puisse pas définir une vue d'en-tête de tableau avec une hauteur de 0. J'ai fini par faire ce qui suit :

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

13voto

Odd-Arne Dahle Points 131

Vous pouvez essayer ceci :

Dans le loadView

_tableView.sectionHeaderHeight = 0;

Entonces

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

Il devrait être supprimé tant que vous n'avez pas d'objets dans l'en-tête...

Et si vous voulez une certaine taille de l'en-tête de section, alors changez seulement la valeur de retour.

même si vous ne supprimez pas le pied de section.

_tableView.sectionFooterHeight = 0;

et

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

Eh bien, cela fonctionne pour mes problèmes avec la tableview dans l'iOS7.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X