- ios/
- Ios 如何在滚动tableview期间始终将tableview的第一个单元格保持在其tableview的顶部
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;
//移动滚动插入以跨越表格行的高度
自我指示符号集=