web-dev-qa-db-fra.com

Comment faire défiler l'en-tête avec UITableView?

J'ai un UITableView avec un en-tête. le problème que j'ai actuellement, c'est que l'en-tête ne défile pas avec la table. J'ai besoin de faire défiler l'écran (ci-dessus) lorsque l'utilisateur fait défiler la vue du tableau. la vue de table défile mais l'en-tête est verrouillé en haut de la UIView.

merci

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

    UIView *sectionHeader = [[UILabel alloc] initWithFrame:CGRectNull];
    sectionHeader.backgroundColor = [UIColor whiteColor];

    // add user profile image to _contentView
    UIImageView *userImageView;

    UIImage *userImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:userProfileImageUrl]]];

    userImageView=[[UIImageView alloc]initWithImage:userImage];
    userImageView.frame=CGRectMake(10,10,90,100);

   [sectionHeader addSubview:userImageView];

   // return userImageView;

    // user name lable
    CGRect userNameFrame = CGRectMake(110, 60, 100, 50 );
    UILabel* userNameLabel = [[UILabel alloc] initWithFrame: userNameFrame];
    [userNameLabel setText: firstName];
    [userNameLabel setTextColor: [UIColor blackColor]];
    [userNameLabel setBackgroundColor:[UIColor clearColor]];
    [userNameLabel setFont:[UIFont fontWithName:@"DIN-Regular" size:14]];

    [sectionHeader addSubview:userNameLabel];

    // user last name label
    CGRect userLastNameFrame = CGRectMake(110, 75, 100, 50 );
    UILabel* userLastNameLabel = [[UILabel alloc] initWithFrame: userLastNameFrame];
    [userLastNameLabel setText: lastName];
    [userLastNameLabel setTextColor: [UIColor blackColor]];
    [userLastNameLabel setBackgroundColor:[UIColor clearColor]];
    [userLastNameLabel setFont:[UIFont fontWithName:@"DIN-Regular" size:14]];

    [sectionHeader addSubview:userLastNameLabel];

    // user checkin view
    UIView *userCheckinView = [[UIView alloc] initWithFrame:CGRectMake(10, 120, 280, 25)];
    userCheckinView.backgroundColor = customColorGrey;
    [sectionHeader addSubview:userCheckinView];

    // check in label
    UILabel* userCheckInLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 2, 100, 20)];
    [userCheckInLabel setText: @"CHECK-IN"];
    userCheckInLabel.backgroundColor = customColorGrey;
    userCheckInLabel.textColor = customColorIt;
    [userCheckInLabel setFont:[UIFont fontWithName:@"DIN-Regular" size:12]];

    [userCheckinView addSubview:userCheckInLabel];

    // image
    UIImageView *checkinImg = [[UIImageView alloc]
                               initWithImage:[UIImage imageNamed:@"classifica_geotag_C.png"]];
    checkinImg.frame = CGRectMake(5, 0, 24, 24);
    [userCheckinView addSubview:checkinImg];

    // check in label
    UILabel* userCheckInCountLabel = [[UILabel alloc] initWithFrame:CGRectMake(250, 2, 20, 20)];
    [userCheckInCountLabel setText: [checkinCount stringValue]];
    userCheckInCountLabel.backgroundColor = customColorGrey;
    userCheckInCountLabel.textColor = customColorIt;
    [userCheckInCountLabel setFont:[UIFont fontWithName:@"DIN-Regular" size:12]];

    [userCheckinView addSubview:userCheckInCountLabel];

    // user like view
    UIView *userLikeView = [[UIView alloc] initWithFrame:CGRectMake(10, 150, 280, 25)];
    userLikeView.backgroundColor = customColorGrey;
    [sectionHeader addSubview:userLikeView];

    // like label
    UILabel* userLikeLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 2, 100, 20)];
    [userLikeLabel setText: @"LIKE"];
    userLikeLabel.backgroundColor = customColorGrey;
    userLikeLabel.textColor = customColorIt;
    [userLikeLabel setFont:[UIFont fontWithName:@"DIN-Regular" size:12]];

    [userLikeView addSubview:userLikeLabel];

    // image
    UIImageView *likeImg = [[UIImageView alloc]
                            initWithImage:[UIImage imageNamed:@"classifica_like_C.png"]];
    likeImg.frame = CGRectMake(5, 0, 24, 24);
    [userLikeView addSubview:likeImg];

    // user like label
    UILabel* userLikeCountLabel = [[UILabel alloc] initWithFrame:CGRectMake(250, 2, 20, 20)];
    [userLikeCountLabel setText: [likesCount stringValue]];
    userLikeCountLabel.backgroundColor = customColorGrey;
    userLikeCountLabel.textColor = customColorIt;
    [userLikeCountLabel setFont:[UIFont fontWithName:@"DIN-Regular" size:12]];

    [userLikeView addSubview:userLikeCountLabel];


    // la mia bacheca like view
    userLaMiaView = [[UIView alloc] initWithFrame:CGRectMake(10, 180, 300, 25)];
    userLaMiaView.backgroundColor = [UIColor clearColor];
    [sectionHeader addSubview:userLaMiaView];


    // like label
    UILabel* userLaMiaLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, 150, 20)];
    [userLaMiaLabel setText:NSLocalizedString(@"LA MIA BACHECA", nil)];

    userLaMiaLabel.backgroundColor = [UIColor clearColor];
    userLaMiaLabel.textColor = customColorGrey;
    [userLaMiaLabel setFont:[UIFont fontWithName:@"DIN-Bold" size:10]];

    [userLaMiaView addSubview:userLaMiaLabel];

    // grey line view below la mia label
    userGreyLineView = [[UIView alloc] initWithFrame:CGRectMake(10, 248, 280, 1.5)];
    userGreyLineView.backgroundColor = [UIColor whiteColor];
    [sectionHeader addSubview:userGreyLineView];


    return sectionHeader;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 210;
}
22
user2588945

créer la vue sectionHeader dans une nouvelle méthode, puis ajouter à la fin: 

self.tableView.tableHeaderView = sectionHeader;
40
Ilario

Ce comportement n'est commun que lorsque la propriété UITableViewStyle de la table est définie sur UITableViewStylePlain. Si vous le définissez sur UITableViewStyleGrouped, les en-têtes défileront avec les cellules.

Cette réponse est tirée de cette question .

Cette solution fonctionne quel que soit le nombre d'en-têtes.

46
Carl

Si vous passez de UITableViewStyle de Plain à Grouped, faites en-tête de section défiler avec les autres cellules.

5
Anjali Prasad

Si vous écrivez tableView.tableHeaderView = sectionHeader, vous perdrez l'en-tête actuel de la vue tableau.
Si vous souhaitez avoir un en-tête de vue de tableau avec des en-têtes de section, vous devez définir la propriété UITableViewStyle sur UITableViewStyleGrouped.
De même, si vous souhaitez calculer automatiquement la hauteur de l'en-tête de section, vous pouvez return UITableViewAutomaticDimension dans la méthode heightForHeaderInSection comme ceci: 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return UITableViewAutomaticDimension;
}
4
Rendel

Si vous avez un seul en-tête dans la table, vous pouvez utiliser tableHeaderView comme ci-dessous:

tableView.tableHeaderView = Header;

Ou si vous avez plusieurs en-têtes dans la table, vous devez utiliser la table Group au lieu de la table plain.

Merci

4
Hindu

si vous avez une vue d'en-tête dynamique ou une vue unique, sélectionnez le style de tableau  select table view style as <code>group</code> table

0
Ketan Sodvadiya