0

我想制作一个表视图控制器,它在表视图标题视图中保存一个表视图和一个图像视图。当我向下滚动表格视图时,我想放大图像(就像在 iOS 的 CNN 应用程序中一样)。我尝试了很多东西,但没有一个是我想要的。也许有人可以帮助我。谢谢!

所有屏幕将如下图所示:


(来源:mzstatic.com

4

1 回答 1

0

我试图通过使顶部的图像成为表格的标题视图来做到这一点,但无法让它发挥作用。

可行的方法是将滚动视图添加到 UIViewController 视图的顶部,其中包含图像视图。然后我添加了一个表格视图,并使其与控制器视图的大小相同,以便它位于包含图像的小滚动视图的顶部(这是在关闭自动布局的情节提要中完成的)。在代码中,我添加了一个透明的表头视图,并有一个标签作为图片的标题。它与小滚动视图具有相同的高度。当您向上滚动表格视图的内容时,我也会滚动小滚动视图,但速度只有一半。如果您将内容拉下,我会更改小滚动视图的框架,使其扩展并保持居中。这是代码:

@interface ViewController ()
@property (strong,nonatomic) NSArray *theData;
@property (weak,nonatomic) IBOutlet UITableView *tableView;
@property (weak,nonatomic) IBOutlet UIScrollView *imageScrollView;
@property (nonatomic) CGRect svFrame;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    self.imageScrollView.delegate = self;
    self.imageScrollView.contentSize = CGSizeMake(500, 500);
    self.svFrame = self.imageScrollView.frame;
    self.theData = @[@"One",@"Two",@"Three",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine"];

    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 135)];
    headerView.backgroundColor = [UIColor clearColor];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, headerView.frame.size.width, 24)];
    label.backgroundColor = [UIColor clearColor];
    label.textAlignment = NSTextAlignmentCenter;
    label.textColor = [UIColor whiteColor];
    label.text = @"This is a Picture Caption";
    [headerView addSubview:label];
    self.tableView.tableHeaderView = headerView;

    [self.tableView reloadData];
}

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    UIView *bgView = [[UIView alloc] init];
    bgView.backgroundColor = [UIColor whiteColor];
    cell.backgroundView = bgView;
}

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.textLabel.text = self.theData[indexPath.row];
    return cell;
}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (! [scrollView isEqual:self.imageScrollView]) {
        if (scrollView.contentOffset.y > 0) {
            self.imageScrollView.contentOffset = CGPointMake(0, scrollView.contentOffset.y/2);
        }else{
            self.imageScrollView.frame = CGRectMake(scrollView.contentOffset.y, scrollView.contentOffset.y, self.svFrame.size.width - (scrollView.contentOffset.y * 2), self.svFrame.size.height - (scrollView.contentOffset.y * 2));
        }
    }
}
于 2013-08-10T03:46:32.727 回答