我利用这段代码在UITableView中水平对齐truckDayScrollViews(UIScrollView的子类)的负载,SUDaysForTruckView只是一个自定义的UILabel
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if ([scrollView isKindOfClass:[SUDaysForTruckView class]]) {
CGPoint offset=CGPointMake(scrollView.contentOffset.x, 0);
for (TruckViewCell *cell in self.tableView.visibleCells) {
cell.truckDayScrollView.contentOffset=offset;
}
self.headerView.contentOffset=offset;
self.scrollViewPosition=offset;
}
else{
NSLog(@"Table view scrolling vertically: %f,%f",self.scrollViewPosition.x,self.scrollViewPosition.y);
self.headerView.contentOffset=self.scrollViewPosition;
}
}
想法是,如果滚动滚动视图的类是单元格的一部分(水平滚动),则更新所有滚动视图,包括标题。这很有效。
虽然tableView垂直滚动时,标题滚动视图中的内容偏移量将重置为0,0。
为什么会这样,有没有办法解决它。我试过把这行
self.headerView.contentOffset=self.scrollViewPosition;
在很多地方使用cellForRow,self.headerView的getter等。一切都无济于事。
第一张图片显示了水平滚动以及标题如何对齐,第二张图片显示了在垂直滚动的第一位发生的情况,标题立即跳出对齐。
答案 0 :(得分:0)
我最终覆盖了drawRect:在垂直滚动之前,我获得了scrollViews的当前内容偏移量。然后我需要额外的一点来阻止我的所有观点都有黑色背景。
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGFloat white[] = {1, 1, 1, 1};
CGContextSetFillColor(ctx, white);
CGContextAddRect(ctx, rect);
CGContextFillPath(ctx);
self.contentOffset=[self.scrollViewMaster scrollViewPosition];
}