如何在滚动表格视图期间始终将表格视图的第一个单元格保持在其表格视图的顶部
Posted
技术标签:
【中文标题】如何在滚动表格视图期间始终将表格视图的第一个单元格保持在其表格视图的顶部【英文标题】:How to keep always first cell of tableview on top of its tableview during scroll tableview 【发布时间】:2015-08-25 10:24:39 【问题描述】:我想在滚动时让我的第一个单元格始终位于表格视图的顶部。
任何帮助都是可观的。在此先感谢...
【问题讨论】:
不要让它成为一个单元格,让它成为表格视图之上的一个视图...... 如果您愿意,您可以将该视图设置为表格视图中的标题。 @Rajatp 你能帮我将第一个单元格设置为我的表格视图的标题吗?这是我想解决的问题。谢谢你 @Luong Nhu Toan 您使用哪种语言? @Rajatp 我正在使用 Objective-C 【参考方案1】:这是为 UITableView 创建 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;
希望对你有所帮助。
【讨论】:
我认为解决这个问题的方法是正确的,但是当我向下滚动 tableview 时,我的第一个单元格仍然消失。这是我的代码:-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection :(NSInteger)section UIView *sectionHeaderView = [[UIView alloc] initWithFrame: CGRectMake(0, 0,tableView.frame.size.width, 100.0)]; sectionHeaderView=[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; // 根据您的设计自定义它返回 sectionHeaderView; 您必须在 xib 或故事板中分别为第一个单元格设计视图,并将该视图用作 tableview 的标题。【参考方案2】:这里是一个可以继承的表格视图类,提供一个贴在可见区域顶部的表头。它具有以下主要特点:
-
如果您的标题具有透明度,您可以选择提供掩蔽图像,因此您需要隐藏滚动的表格单元格。
您可以从视图控制器配置可见标题区域的高度。
FixedHeaderTableView.h
/** * 带有固定标题的表格。标题不会滚动到可见区域的顶部,也不会 * 从标题区域的顶部向下滚动。滚动指示器插图被调整到顶部 * 表格,位于标题视图下方。 * * 使用说明: * * 1)创建一个继承自FixedHeaderTableView的表格视图,并对其进行配置: * - 将委托设置为您的视图控制器 * - 这允许您实现 UITableViewDelegate 方法和 UIScrollViewDelegate 方法, * 滚动视图DidScroll: * 2) 单独创建一个和table view宽度一样的UIView,用作固定的table header。 * 3) 在你的 UITableViewDelegate 中实现 scrollViewDidScroll: 来简单地委托给你的 FixedHeaderTableView。 * 4) 在视图控制器的 viewDidLoad 中,执行以下操作: * - 将 containerView 属性设置为视图控制器的主视图。 * - 如果表头不完全不透明,则创建或获取掩蔽视图。这可以防止表格单元格 * 当它们向上滚动时,它们不会显示在标题视图后面。 * - 调用 setFixedTableHeaderView:visibleHeaderHeight:withMaskingImageView:maskingImageFrame: 在你的 * 固定页眉表视图。 */ @interface FixedHeaderTableView : UITableView UIView *_containerView; UIView *_fixedTableHeaderView; int _hiddenHeight; //用于屏蔽透明表头后面的单元格 UIImageView *_maskingImageView; @property(强,非原子) UIView *containerView; /** * 从 UITableViewDelegate 调用,以委托标题视图定位和遮罩。 */ - (void) scrollViewDidScroll:(UIScrollView *)scrollView; /** * 应该从视图控制器的 viewDidLoad 调用。 ** 这设置和配置固定表头视图。 * * @param fixedTableHeaderView UIView 用作sticky header * * @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; @property (strong, nonatomic) UIView *fixedTableHeaderView; @property(强,非原子) 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; //防止表头完全滚动到顶部 如果(scrollView.contentOffset.y > _hiddenHeight) tableHeaderRect.origin.y = -_hiddenHeight; _maskingImageView.hidden = 假; 别的 _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【讨论】:
以上是关于如何在滚动表格视图期间始终将表格视图的第一个单元格保持在其表格视图的顶部的主要内容,如果未能解决你的问题,请参考以下文章
将表格视图添加到滚动视图并让滚动视图随着单元格添加到表格视图而不断增长