我的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
答案 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中设置偏移量的代码。这将确保在设置视图之前不会完成它并且它应该解决您的问题。这就是您重复使用的单元格正常的原因,因为视图已经设置好了。试试这个。