2014-09-07 3 views
1

J'ai un problème étrange avec tableViewHeader que je redimensionne lors du défilement. Après le premier défilement vers le haut, j'ai un espace entre tableHeader et les cellules et après chaque défilement suivant, l'espace augmente.UITableView gap entre UITableViewHeader et les cellules

Dans la classe personnalisée tableViewHeader, après le défilement, je modifie la hauteur et la restaure, puis la réinitialise, afin que UITableView mette à jour la taille de l'image.

J'ai aussi 0.1f hauteur pour la première vue en coupe, UITableViewController,

self.automaticallyAdjustsScrollViewInsets = NO; 

Je double vérifié que tableViewHeader ont bonne hauteur.

J'ai essayé beaucoup de solutions, mais rien ne fonctionne pour moi.

Que se passe-t-il? Qui ajoute de l'espace et pourquoi?

EDIT: délégué table et méthodes source de données

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

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


    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 
    return 1; 
    } 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 1; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.section == 0 && indexPath.row == 0) { 
     return [self nameCell]; 
    } 
    return nil; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.section == 0 && indexPath.row == 0) { 
     return 60; 
    } 

    return 0; 
} 

-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    if (section == 0) { 
     UIView* view = [[UIView alloc] initWithFrame: CGRectMake(0.0f, 0.0f, self.tableView.frame.size.width, 0.001f)]; 
     return view; 
    } 

    return nil; 
} 

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView == self.tableView) { 
     [_tableHeader didScroll:scrollView.contentOffset]; 
    } 
} 
+0

Pourriez-vous publier le code pour la classe UITableViewController? Ou au moins les méthodes pertinentes pour le délégué de tableview/datasource? C'est un peu difficile à comprendre sans le code. – Bedford

+0

Oui, juste ajouté à la question –

Répondre

1

trouvé une solution. Tout d'abord, ne définissez pas tableViewHeader dans une classe personnalisée.

Faites-le dans le contrôleur où tableView est inséré.

Deuxièmement: wrap tableViewHeader défini dans beginUpdates, endUpdates.

Je ne sais pas comment « mises à jour » pour les cellules utilisées avec tableViewHeader, mais cela fonctionne

0

i fixe en mettant l'en-tête (mise en page automatique) en vue d'une pellicule qui est un UIView fixe comme sous-vue. l'écart sera parti.

self.header = [[NSBundle mainBundle] loadNibNamed:@"FriendDetailHeaderView" 
              owner:nil 
              options:nil][0]; 
self.header.frame = CGRectMake(0, 0, ScreenWidth, ScreenWidth/16*9+25); 
UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenWidth/16*9+25)]; 
aView.backgroundColor = [UIColor blackColor]; 
[aView addSubview:self.header]; 
self.tableView.tableHeaderView = aView; 

La mise en page automatique tableViewHeader ne peut parfois pas fonctionner. mais dans mon projet précédent, définissez la vue de disposition automatique à tableView.tableViewHeader cela fonctionne parfaitement

Questions connexes