如何在滚动tableview期间始终保持tableview顶部的第一个单元格

滚动时,我想保持我的第一个单元格始终在我的tableview顶部。

任何帮助是可观的。感谢提前…

这里是你如何为你的UITableView创build你的Header视图

- (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; } 

现在返回的高度

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

希望这可以帮助你。

这是一个表格视图类,可以inheritance,以提供一个标题,坚持在可见区域的顶部。 它具有以下关键特性:

  1. 您可以select提供遮罩图像,在头部具有透明度的情况下,您需要隐藏滚动的表格单元格。
  2. 您可以从视图控制器configuration可见标题区域的高度。

FixedHeaderTableView.h

     / **
      *带有固定标题的表格。 标题不会从可见区域的顶部滚动,也不会滚动
      *向下滚动标题区域的顶部。 滚动指示器插图被调整到顶部
      *表格,在标题视图下方。
      *
      * 使用说明:
      *
      * 1)创build一个从FixedHeaderTableViewinheritance的表视图,并对其进行configuration:
      *  - 将代表设置到您的视图控制器
      *  - 这可以让你实现UITableViewDelegate方法和UIScrollViewDelegate方法,
      * scrollViewDidScroll:
      * 2)创build一个与表视图相同宽度的UIView,用作固定表头。
      * 3)实现scrollViewDidScroll:在你的UITableViewDelegate,简单地委托给你的FixedHeaderTableView。
      * 4)在视图控制器的viewDidLoad中,执行以下操作:
      *  - 将containerView属性设置为视图控制器的主视图。
      *  - 如果表头不完全不透明,则创build或获取遮罩视图。 这可以防止表格单元格
      *在标题视图后面显示,当它们向上滚动时。
      *  - 调用setFixedTableHeaderView:visibleHeaderHeight:withMaskingImageView:maskingImageFrame:在你的
      * FixedHeaderTableView。
      * /
     @interface FixedHeaderTableView:UITableView {
         UIView * _containerView;
         UIView * _fixedTableHeaderView;
         int _hiddenHeight;

         //用于隐藏透明标题后面的单元格
         UIImageView * _maskingImageView;
     }

     @属性(强,非primefaces)UIView * containerView;

     / **
      *从UITableViewDelegate调用,委托标题视图定位和掩蔽。
      * /
     - (void)scrollViewDidScroll:(UIScrollView *)scrollView;

     / **
      *应该从视图控制器的viewDidLoad调用。
      * 

*这设置和configuration固定桌面视图。 * * @param fixedTableHeaderView用作粘性头部的UIView * * @param visibleHeaderHeight头部的底部将保持可见。 这个可以 *与标题视图高度相同或更低。 如果没有了 *此范围内,它被夹紧到最接近的值(0或高度)。 * * @param maskingImage这是可选的,只有在你的头部视图有时才需要 *透明区域。 使用蒙版图像提供更好 *性能比调整每个细胞的掩模,在 * scrollViewDidScroll:委托方法。 * * @param maskingImageFrame如果提供了遮罩图像,则应将其设置为位置 *背景图像,以便它等于任何其他图像位置 *在后台使用。 * / - (void)setFixedTableHeaderView:(UIView *)fixedTableHeaderView visibleHeaderHeight:(INT)visibleHeaderHeight withMaskingImage:(UIImage *)maskingImage maskingImageFrame:(的CGRect)maskingImageFrame; @结束

FixedHeaderTableView.m

     #import“FixedHeaderTableView.h”

     @interface FixedHeaderTableView()

     @property(assign,nonatomic)int hiddenHeight;
     @属性(强,非primefaces)UIView * fixedTableHeaderView;
     @属性(强,非primefaces)UIImageView * maskingImageView;

     @结束

     @implementation FixedHeaderTableView

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

         / /防止表头被从顶部拖下来
         tableHeaderRect.origin.y = MIN(0,-scrollView.contentOffset.y);
         tableHeaderRect.origin.y + = self.frame.origin.y;

         //防止表头从顶部完全滚动
         if(scrollView.contentOffset.y> _hiddenHeight){
             tableHeaderRect.origin.y = -_hiddenHeight;
             _maskingImageView.hidden = FALSE;
         } else {
             _maskingImageView.hidden = TRUE;
         }

         self.fixedTableHeaderView.frame = tableHeaderRect;
     }

     - (void)setFixedTableHeaderView:(UIView *)fixedTableHeaderView
                  visibleHeaderHeight:(INT)visibleHeaderHeight
                     withMaskingImage:(UIImage *)maskingImage
                   maskingImageFrame:(的CGRect)maskingImageFrame
     {
         self.fixedTableHeaderView = fixedTableHeaderView;

         //安静地确保值不超出可接受的范围
         if(visibleHeaderHeight> _fixedTableHeaderView.frame.size.height){
             visibleHeaderHeight = _fixedTableHeaderView.frame.size.height;
         } else if(visibleHeaderHeight <0){
             visibleHeaderHeight = 0;
         }
         self.hiddenHeight = _fixedTableHeaderView.frame.size.height  -  visibleHeaderHeight;

         //移动滚动插入以跨越表格行的高度
         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,self.frame.size.width,_fixedTableHeaderView.frame.size.height)];

         //表格标题视图位于固定标题视图的后面
         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;
         }
     }

     @结束