Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在滚动tableview期间始终将tableview的第一个单元格保持在其tableview的顶部_Ios_Uitableview_Uiscrollview - Fatal编程技术网

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

Ios 如何在滚动tableview期间始终将tableview的第一个单元格保持在其tableview的顶部,ios,uitableview,uiscrollview,Ios,Uitableview,Uiscrollview,滚动时,我希望第一个单元格始终位于tableview的顶部 任何帮助都是值得感谢的。请提前感谢…以下是如何为UITableView创建标题视图 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) section { UIView *sectionHeaderView = [[UIView alloc] initWithFrame:

滚动时,我希望第一个单元格始终位于tableview的顶部


任何帮助都是值得感谢的。请提前感谢…

以下是如何为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;

}
现在返回目标的高度

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

希望这对您有所帮助。

这里有一个可以继承的表视图类,提供一个粘贴到可见区域顶部的标题。它有以下主要特点:

  • 您可以选择提供一个遮罩图像,在这种情况下,您的标题是透明的,因此您需要隐藏滚动的表格单元格
  • 可以从视图控制器配置可见标题区域的高度
  • FixedHeaderTableView.h

    /** * Table with a fixed header. The header does not scroll off the top of the visible area, and it does not * scroll down off the top of the header area. The scroll indicator insets are adjusted to go to the top of * the table, below the header view. * * Instructions for use: * * 1) Create a table view that inherits from FixedHeaderTableView, and configure it: * - set the delegate to your view controller * - this allows you to implement UITableViewDelegate methods, and UIScrollViewDelegate method, * scrollViewDidScroll: * 2) Create a separate UIView with the same width as the table view, to be used as the fixed table header. * 3) Implement scrollViewDidScroll: in your UITableViewDelegate, to simply delegate to your FixedHeaderTableView. * 4) In viewDidLoad of your view controller, do the following: * - Set the containerView property to the view controller's main view. * - Create or get a masking view, if the table header is not fully opaque. This prevents the table cells * from being shown behind the header view, when they are scrolled up. * - Call setFixedTableHeaderView:visibleHeaderHeight:withMaskingImageView:maskingImageFrame: on your * FixedHeaderTableView. */ @interface FixedHeaderTableView : UITableView { UIView *_containerView; UIView *_fixedTableHeaderView; int _hiddenHeight; //Used to mask cells behind a transparent header UIImageView *_maskingImageView; } @property (strong, nonatomic) UIView *containerView; /** * To be called from the UITableViewDelegate, to delegate header view positioning and masking. */ - (void) scrollViewDidScroll:(UIScrollView *)scrollView; /** * Should be called from viewDidLoad of the view controller. * * This sets and configures the fixed table head view. * * @param fixedTableHeaderView UIView that is used as the sticky header * * @param visibleHeaderHeight The bottom portion of the header that will stay visible. This can * be the same height as the header view, or lower. If it is out of * this range, it is clamped to the closest value (0 or the height). * * @param maskingImage This is optional, and it only needed if your header view has * transparent areas. Using a masking image provides much better * performance than adjusting the masks of each cell, in the * scrollViewDidScroll: delegate method. * * @param maskingImageFrame If the masking image is provided, this should be set to position * the background image, so that it is equal to any other image position * used in the background. */ - (void) setFixedTableHeaderView:(UIView *)fixedTableHeaderView visibleHeaderHeight:(int)visibleHeaderHeight withMaskingImage:(UIImage *)maskingImage maskingImageFrame:(CGRect)maskingImageFrame; @end /** *具有固定标题的表。标题不会从可见区域的顶部滚动,也不会 *向下滚动标题区域的顶部。滚动指示器插图被调整到屏幕顶部 *标题视图下方的表格。 * *使用说明: * *1)创建从FixedHeaderTableView继承的表视图,并对其进行配置: *-将代理设置为视图控制器 *-这允许您实现UITableViewDelegate方法和UIScrollViewDelegate方法, *scrollViewDidScroll: *2)创建一个与表格视图宽度相同的单独UIView,用作固定表格标题。 *3)实现scrollViewDidScroll:在UITableViewDelegate中,只需将其委托给FixedHeaderTableView。 *4)在视图控制器的viewDidLoad中,执行以下操作: *-将containerView属性设置为视图控制器的主视图。 *-如果表格标题不是完全不透明的,则创建或获取遮罩视图。这可以防止表格单元格被删除 *从标题视图后面显示,当它们向上滚动时。 *-调用setFixedTableHeaderView:visibleHeaderHeight:with MaskingImageView:maskingImageFrame:在您的计算机上 *FixedHeaderTableView。 */ @接口FixedHeaderTableView:UITableView{ UIView*_containerView; UIView*_fixedTableHeaderView; 内部隐藏高度; //用于遮罩透明标题后面的单元格 UIImageView*_maskingImageView; } @属性(强,非原子)UIView*containerView; /** *从UITableViewDelegate调用,以委托标题视图定位和遮罩。 */ -(void)scrollViewDidScroll:(UIScrollView*)scrollView; /** *应从视图控制器的viewDidLoad调用。 * *这将设置和配置固定桌面视图。 * *@param fixedTableHeaderView UIView,用作粘性标头 * *@param visibleheader将标题底部保持可见。这个可以 *与页眉视图的高度相同或更低。如果它不在 *在该范围内,它被钳制为最接近的值(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 (strong, nonatomic) UIImageView *maskingImageView; @end @implementation FixedHeaderTableView - (void) scrollViewDidScroll:(UIScrollView *)scrollView { CGRect tableHeaderRect = _fixedTableHeaderView.frame; //Prevent table header from being dragging down from the top tableHeaderRect.origin.y = MIN(0, -scrollView.contentOffset.y); tableHeaderRect.origin.y += self.frame.origin.y; //Prevent table header from scrolling completely off the top 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; //Quietly ensure the value is not out of acceptable range if (visibleHeaderHeight > _fixedTableHeaderView.frame.size.height) { visibleHeaderHeight = _fixedTableHeaderView.frame.size.height; } else if (visibleHeaderHeight < 0) { visibleHeaderHeight = 0; } self.hiddenHeight = _fixedTableHeaderView.frame.size.height - visibleHeaderHeight; //Shift the scrolling insets to span the height of the table's rows 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)]; //Table header view sits behind the fixed header view 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; } } @end #导入“FixedHeaderTableView.h” @接口FixedHeaderTableView() @属性(赋值,非原子)int-hiddenHeight; @属性(强,非原子)UIView*fixedTableHeaderView; @属性(强,非原子)UIImageView*maskingImageView; @结束 @实现FixedHeaderTableView -(无效)scrollViewDidScroll:(UIScrollView*)scrollView { CGRect tableHeaderRect=\u fixedTableHeaderView.frame; //防止从顶部向下拖动表格标题 tableHeaderRect.origin.y=MIN(0,-scrollView.contentOffset.y); tableHeaderRect.origin.y+=self.frame.origin.y; //防止表格标题完全从顶部滚动 如果(scrollView.contentOffset.y>\u hiddenHeight){ tableHeaderRect.origin.y=-\u隐藏高度; _maskingImageView.hidden=FALSE; }否则{ _maskingImageView.hidden=TRUE; } self.fixedTableHeaderView.frame=tableHeaderRect; } -(void)setFixedTableHeaderView:(UIView*)fixedTableHeaderView visibleHeaderHeight:(int)visibleHeaderHeight withMaskingImage:(UIImage*)maskingImage maskingImageFrame:(CGRect)maskingImageFrame { self.fixedTableHeaderView=fixedTableHeaderView; //请确保该值不超出可接受的范围 if(可视标头高度>\U fixedTableHeaderView.frame.size.height){ visibleHeaderHeight=_fixedTableHeaderView.frame.size.height; }否则,如果(可见人头高度<0){ visibleHeaderHeight=0; } self.hiddenHeight=\u fixedTableHeaderView.frame.size.height-visibleHeaderHeight; //移动滚动插入以跨越表格行的高度 自我指示符号集=