UIScrollView 滚动后 UITableView contentOffset 重置

Posted

技术标签:

【中文标题】UIScrollView 滚动后 UITableView contentOffset 重置【英文标题】:UITableView contentOffset resets after UIScrollView scrolls 【发布时间】:2013-02-17 17:03:24 【问题描述】:

我有一个 UIScrollView,我希望它位于我的 tableView 上方。我把它作为我的 tableview 的子视图 - 当它被添加时,tableview 使用 tableView 的 contentOffset 向下滚动到相关部分。当滚动视图滚动时,tableView 滚动回顶部。

我怎样才能阻止这种情况发生?

【问题讨论】:

如果你想让scrollview在tableview之上,你为什么要让scrollview成为tableview的子视图?您应该使滚动视图和表格视图都成为公共父视图的子视图。 我正在使用 UITableViewController,所以我认为我别无选择? 然后使用 UIViewController 代替并将滚动视图和表格视图添加为子视图。 【参考方案1】:

您必须将 UIScrollView 的实例添加为 tableView 单元格的子视图。 例如

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

return 30;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

if (indexPath.row == 15) 
    return 200;

return 44; 

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

static NSString *cellIdentifier = @"Cell";


UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];

if (indexPath.row == 15) 

    UIScrollView *scroll = [[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 200)] autorelease];
    scroll.backgroundColor = [UIColor greenColor];
    scroll.contentSize = CGSizeMake(self.view.frame.size.width, 500);
    [cell addSubview:scroll];



return cell; 

然后可以在viewDidLoad中设置tableView的contentOffset

- (void)viewDidLoad 
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.tableView.contentOffset = CGPointMake(0, 400); 

您还可以通过继承 UITableViewCell 来创建带有滚动视图的自定义单元格。学习如何 在此tutorial 中自定义 tableView 单元格。

【讨论】:

我试图让 UIScrollView 完全位于表格上方,但在滚动时不改变 tableView 的偏移量。我正在使用 tableViewController,所以我将它添加到我的 tableView 中。在我最初的问题中,我可能没有足够清楚地解释这一点。我现在就编辑它。

以上是关于UIScrollView 滚动后 UITableView contentOffset 重置的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 滚动后 UITableView contentOffset 重置

添加第三个 UICollectionView 后 UIScrollView 明显的滚动滞后

在程序生成的滚动完成后将调用啥 UIScrollview 委托方法

在 UIScrollView 中调整视图大小后,滚动视图不知道它改变了

滚动后如何获取 UIScrollView 的 CGRect?

在 UIScrollview 上缩放图像后,它会滚动到图像区域之外