Comment garder toujours la première cellule de tableview au-dessus de sa vue de table pendant défilement tableview

Je veux garder ma première cellule toujours au-dessus de ma tableview lorsque je défile.

Toute aide est appréciable. Merci d'avance …

Voici comment vous créez votre vue en-tête pour votre UITableView

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) section { UIView *sectionHeaderView = [[UIView alloc] initWithFrame: CGRectMake(0, 0,tableView.frame.size.width, 40.0)]; // Customize it as per your design return sectionHeaderView; } 

Maintenant, returnnez la hauteur du

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { //return the desirable height return 40; } 

J'espère que cela vous aide.

Voici une class de vue de table qui peut être héritée, pour fournir un en-tête qui colle au sumt de la zone visible. Il a ces caractéristiques keys:

  1. Vous avez la possibilité de fournir une image de masquage, dans les cas où votre en-tête est transparent et vous devez donc masquer les cellules du tableau défilées.
  2. Vous pouvez configurer la hauteur de la zone d'en-tête visible depuis le controller de vue.

FixedHeaderTableView.h

     / **
      * Table avec un en-tête fixe.  L'en-tête ne défile pas en haut de la zone visible, et il ne
      * faites défiler la partie supérieure de la zone d'en-tête.  Les incrustations d'indicateur de défilement sont ajustées pour aller au sumt de
      * la table, sous la vue d'en-tête.
      *
      * Mode d'emploi:
      *
      * 1) Créez une vue de table qui hérite de FixedHeaderTableView et configurez-la:
      * - Définir le délégué à votre controller de vue
      * - ceci vous permet d'implémenter les methods UITableViewDelegate, et la méthode UIScrollViewDelegate,
      * scrollViewDidScroll:
      * 2) Créez un UIView distinct avec la même largeur que la vue de table, à utiliser comme en-tête de table fixe.
      * 3) Implémentez scrollViewDidScroll: dans votre UITableViewDelegate, pour simplement déléguer à votre FixedHeaderTableView.
      * 4) Dans viewDidLoad de votre controller de vue, procédez comme suit:
      * - Définir la propriété containerView à la vue principale du controller de vue.
      * - Créer ou get une vue de masquage, si l'en-tête de la table n'est pas complètement opaque.  Cela empêche les cellules du tableau
      * d'être montré derrière la vue d'en-tête, quand ils sont défilés vers le haut.
      * - Appelez setFixedTableHeaderView: visibleHeaderHeight: withMaskingImageView: maskingImageFrame: sur votre
      * FixedHeaderTableView.
      * /
     @interface FixedHeaderTableView: UITableView {
         UIView * _containerView;
         UIView * _fixedTableHeaderView;
         int _hiddenHeight;

         // Utilisé pour masquer les cellules derrière un en-tête transparent
         UIImageView * _maskingImageView;
     }

     @property (fort, nonatomic) UIView * containerView;

     / **
      * Pour être appelé à partir de UITableViewDelegate, pour déléguer le positionnement et le masquage de l'en-tête.
      * /
     - (void) scrollViewDidScroll: (UIScrollView *) scrollView;

     / **
      * Doit être appelé depuis viewDidLoad du controller de vue.
      * 

* Ceci définit et configure la vue de la tête de table fixe. * * @param fixedTableHeaderView UIView utilisé comme en-tête collante * * @param visibleHeaderHeight La partie inférieure de l'en-tête qui restra visible. Ceci peut * avoir la même hauteur que la vue d'en-tête, ou plus bas. Si c'est hors de * cette plage, il est serré à la valeur la plus proche (0 ou la hauteur). * * @param maskingImage Ceci est facultatif, et seulement nécessaire si votre vue d'en-tête a * zones transparentes. L'utilisation d'une image de masquage fournit beaucoup mieux * performance que d'ajuster les masques de chaque cellule, dans le * scrollViewDidScroll: méthode de délégation. * * @param maskingImageFrame Si l'image de masquage est fournie, elle doit être mise en position * l'image d'arrière-plan, de sorte qu'il est égal à toute autre position de l'image * utilisé en arrière-plan. * / - (void) setFixedTableHeaderView: (UIView *) fixedTableHeaderView visibleHeaderHeight: (int) visibleHeaderHeight withMaskingImage: (UIImage *) masquageImage maskingImageFrame: (CGRect) maskingImageFrame; @fin

FixedHeaderTableView.m

     #import "FixedHeaderTableView.h"

     @interface FixedHeaderTableView ()

     @property (assign, nonatomic) int hiddenHeight;
     @property (fort, nonatomic) UIView * fixedTableHeaderView;
     @property (fort, nonatomic) UIImageView * maskingImageView;

     @fin

     @implementation FixedHeaderTableView

     - (void) scrollViewDidScroll: (UIScrollView *) scrollView
     {
         CGRect tableHeaderRect = _fixedTableHeaderView.frame;

         // Empêche l'en-tête de la table de glisser depuis le haut
         tableHeaderRect.origin.y = MIN (0, -scrollView.contentOffset.y);
         tableHeaderRect.origin.y + = self.frame.origin.y;

         // Empêche l'en-tête de la table de défiler complètement du haut
         if (scrollView.contentOffset.y> _hiddenHeight) {
             tableHeaderRect.origin.y = -hiddenHeight;
             _maskingImageView.hidden = FALSE;
         } autre {
             _maskingImageView.hidden = TRUE;
         }

         self.fixedTableHeaderView.frame = tableHeaderRect;
     }

     - (void) setFixedTableHeaderView: (UIView *) fixedTableHeaderView
                  visibleHeaderHeight: (int) visibleHeaderHeight
                     withMaskingImage: (UIImage *) masquageImage
                   maskingImageFrame: (CGRect) maskingImageFrame
     {
         self.fixedTableHeaderView = fixedTableHeaderView;

         // Assurez-vous que la valeur n'est pas hors de scope acceptable
         if (visibleHeaderHeight> _fixedTableHeaderView.frame.size.height) {
             visibleHeaderHeight = _fixedTableHeaderView.frame.size.height;
         } else if (visibleHeaderHeight <0) {
             visibleHeaderHeight = 0;
         }
         self.hiddenHeight = _fixedTableHeaderView.frame.size.height - visibleHeaderHeight;

         // Décale les incrustations de défilement pour couvrir la hauteur des lignes de la table
         self.scrollIndicatorInsets = UIEdgeInsetsMake (_fixedTableHeaderView.frame.size.height, 0, 0, 0);

         CGRect tableHeaderFrame = _fixedTableHeaderView.frame;
         tableHeaderFrame.origin.x = self.frame.origin.x;
         tableHeaderFrame.origin.y = self.frame.origin.y;
         _fixedTableHeaderView.frame = tableHeaderFrame;
         [self.superview addSubview: _fixedTableHeaderView];

         self.tableHeaderView = [[UIView alloc] initWithFrame: CGRectMake (0, 0, auto.frame.size.width, _fixedTableHeaderView.frame.size.height)];

         // La vue d'en-tête du tableau se trouve derrière la vue d'en-tête fixe
         if (maskingImage) {
             maskingImageFrame.origin.y + = _hiddenHeight;
             UIImageView * maskingImageView = [[UIImageView alloc] initWithFrame: maskingImageFrame];
             maskingImageView.image = maskingImage.copy;
             [_fixedTableHeaderView addSubview: maskingImageView];
             [_fixedTableHeaderView sendSubviewToBack: maskingImageView];
             _fixedTableHeaderView.clipsToBounds = TRUE;

             self.maskingImageView = maskingImageView;
             _maskingImageView.hidden = TRUE;
         }
     }

     @fin