在图像上滑动UITableView

时间:2014-04-22 23:37:01

标签: ios uitableview uiscrollview

用户首先在页面顶部看到图像;页面的其余部分是图像正下方的UITableView。

当用户在桌面上滑动时,我想向上滑动整个UITableView以覆盖图像,然后开始滚动表格单元格。向下滑动(一旦第一个单元格位于顶部),UITableView将向下滑动以再次显示图像。

这类似于Crackle app(和其他应用程序)所做的。这样做的好/优雅方式是什么?

2 个答案:

答案 0 :(得分:0)

通过设置框架来更改TableView的位置, self.tableView.frame = self.view.frame in -scrollViewWillBeginDragging:

答案 1 :(得分:0)

毫无疑问,有几种方法可以实现这一目标。在途中涉及在第一个单元格内部放置该图像,这与您的数据中的其他单元格不同。滚动时,单元格中图像的位置将向下移动,这样可能会使图像被下面的单元格覆盖。下面的代码显示了如何执行此操作(我从具有交替行的另一个项目中修改了此项,这些行似乎浮动在固定图像上)。

@interface TableController ()
@property (strong,nonatomic) NSArray *theData;
@end

@implementation TableController 


- (void)viewDidLoad {
    [super viewDidLoad];
    self.theData = @[@"One",@"Two",@"Three",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine",@"Black",@"Brown",@"Red",@"Orange",@"Yellow",@"Green",@"Blue"];
}



-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    RDCell *topCell = (RDCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    [topCell updateImageViewWithOffset:scrollView.contentOffset.y];
}



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.theData.count + 1;
}



-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    CGFloat height = (indexPath.row == 0)? 140 : 44;
    return height;
}



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0) {
        RDCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ImageCell" forIndexPath:indexPath];
        return cell;
    }else{
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
        cell.textLabel.text = self.theData[indexPath.row - 1];
        return cell;
    }
}

自定义单元格中的代码只是这一种方法,

-(void)updateImageViewWithOffset:(CGFloat) offset {
    CGFloat cellY = self.frame.origin.y;
    self.topCon.constant = offset - cellY;
}

topCon是NSLayoutConstraint的IBOutlet,位于单元格的顶部和单元格中图像视图的顶部之间 - 图像视图对单元格的顶部和侧面有约束,这很重要,和一个高度约束(等于单元格的高度),但没有约束到单元格的底部。如果您想查看此方法是否为您提供所需的外观,可以从此处下载示例项目http://jmp.sh/zOVz6Ev