web-dev-qa-db-fra.com

Comment changer la hauteur de l'en-tête UITableView groupé?

Je sais comment changer la hauteur des en-têtes de section dans la vue tableau. Mais je suis incapable de trouver une solution pour changer l'espacement par défaut avant la première section.

En ce moment j'ai ce code:

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

enter image description here

79
circuitlego

Il semble que je ne puisse pas définir une vue d'en-tête de table avec une hauteur de 0. J'ai finalement procédé comme 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];
}
19
circuitlego

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

Si vous renvoyez 0, UITableView utilise une valeur par défaut. C'est un comportement non documenté. Si vous renvoyez un très petit nombre, 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
    }

Rapide:

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;
}
206
Mark Krenek

Si vous utilisez tableView style groupé, tableView définissez automatiquement les encarts supérieur et inférieur. Pour les éviter et éviter les encarts internes, utilisez les méthodes de délégation pour l’en-tête et le pied de page. Ne retournez jamais 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
}
23
Jakub Truhlář

Vous pouvez essayer ceci:

Dans le loadView

_tableView.sectionHeaderHeight = 0;

Ensuite

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

Il devrait être supprimé tant que vous n'avez aucun objet dans l'en-tête ...

Et si vous voulez une certaine taille de l'en-tête de section, ne modifiez que la valeur de retour.

idem si vous n’obtenez pas le sectionfooter supprimé.

_tableView.sectionFooterHeight = 0;

et

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

Eh bien, cela fonctionne pour mes problèmes avec la vue de table dans iOS7.

13
Odd-Arne Dahle

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)))
13
FBente

Vous devriez enlever le code self.tableView.tableHeaderView = [UIView new]; après avoir ajouté

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

Dans Swift 2.0

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

        return yourHeight
    }
2
George Asda

vous pouvez utiliser viewForHeaderInSection et retourner une vue avec n'importe quelle hauteur.

- (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;
    }
}
2
Divyam shukla

Dans Swift 4

Supprimez le remplissage supérieur dans la tableview groupée.

Ici la hauteur est donnée à 1 comme hauteur minimale pour l'en-tête de section car vous ne pouvez pas donner 0 car tableview prendra la marge supérieure par défaut si la hauteur zéro est assignée.

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

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

Exemple 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;
0
Jasper