![在此处输入图像说明] [1](iOS应用程序)我想创建一个Table View Controller,它在表视图标题视图中保存表视图和图像视图。当我向下滚动表格视图时,我想放大图像(就像在iOS的CNN应用程序中一样)。我尝试了很多东西,但没有按照我的意愿去做。也许有人可以帮助我。谢谢!
所有屏幕将如下图所示:
答案 0 :(得分: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));
}
}
}