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:
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