在UITableViewCell中设置UIScrollView内容偏移量不适用于未重用的出列单元格

时间:2015-03-18 16:57:14

标签: ios objective-c iphone uitableview uiscrollview

我的UIScrollView子类中放置了UITableViewCell,我想在UIScrollView显示之前将UITableView的内容x-offset设置为320。

没问题,我在setContentOffset方法的UIScrollView内调用了configureCell:withIndexPath:,并在我的tableView:cellForRowAtIndexPath:委托方法中调用后者。这是它的外观:

- (void)viewDidLoad {
  UINib *nib = [UINib nibWithNibName:@"myCellNib" bundle:[NSBundle mainBundle]];
  [_tableView registerNib:nib forCellReuseIdentifier:@"cell"];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  myCell *cell = [_tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
  [self configureCell:cell atIndexPath:indexPath];
  return cell;
}


- (void)configureCell:(myCell *)cell atIndexPath:(NSIndexPath *)indexPath {
  [cell.scrollView setContentOffset:CGPointMake(320, 0)];
}

到目前为止一切顺利,除了现在第一批加载的单元格没有得到所需的结果(所有子视图及其属性都正确设置,除了内容偏移),但是如果我向下滚动{{1}新加载的(重用的)单元格很好,我不确定究竟发生了什么。 HALP!

注意:当我在他们上面调用UITableView时,我检查了我的单元格子视图(UIScrollView)是否为零,我从setContentOffset得到了正确的结果

注意:我为此实现的解决方案是检查NSLog(@"%@", NSStringFromCGPoint(offset)); UIScrollView属性,如果它等于contentSize则手动设置它,这就是发生的事情从注册的NIB初始化未重用的单元时。

CGSizeZero

1 个答案:

答案 0 :(得分:1)

我认为您正在尝试在视图生命周期中过早设置内容偏移量。您需要做的是尝试覆盖-(void)viewDidLayoutSubviews。也许是这样的:

-(void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];

    //write some loop here to cycle through all the index paths and then:
    myCell *cell = (myCell*)[self.tableView cellForRowAtIndexPath:indexPath];
    [self configureCell:cell atIndexPath:indexPath];



}

编写循环以迭代所有索引并获取单元格。然后调用configure单元格方法。还要确保保留用于在prepareCellForReuse中设置偏移量的代码。这将确保在设置视图之前不会完成它并且它应该解决您的问题。这就是您重复使用的单元格正常的原因,因为视图已经设置好了。试试这个。