如何在滚动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,以提供一个标题,坚持在可见区域的顶部。 它具有以下关键特性:
- 您可以select提供遮罩图像,在头部具有透明度的情况下,您需要隐藏滚动的表格单元格。
- 您可以从视图控制器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; } } @结束