UITableView使用自定义单元子视图滚动

时间:2014-04-20 02:34:35

标签: ios objective-c uitableview

我在UITableView滚动时出现以下问题。 在我的设置中,有2 rows per section,每个部分都采用UITableView的完整帧。 如果我向第二个subview添加viewController部分cell's contentView,例如

if (![cell.contentView.subviews containsObject:cell.player.view]) {
    [cell.contentView addSubview:cell.player.view];
}

(此处cell.player是已初始化的MPMoviePlayer控件, 在滚动到下一个section期间,第一个cell将为白色,直到滚动完成。

现在,我注意到这与addSubview函数有关,因为无论我添加什么视图,它都会显示相同的行为。我可以通过实施

来摆脱这种情况
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
     /// detect cell
     [cell.contentView.subviews[0] setHidden:YES];
 }

或将其从superview中的scrollViewWillBeginDragging中移除,但是,如果视图突然消失,则看起来很奇怪。 它只发生在包含自定义cells的{​​{1}}上(如果没有它,则为subview,它 工作顺利)。

我的问题是,有没有人知道在滚动过程中如何避免白色区域,而不是在滚动之前删除/隐藏视图?

为了获得更好的视觉线索,如果我不添加cells,请在此处显示正确行为的屏幕截图:

snag.gy/uDUV2.jpg

以及带有视图的屏幕截图。请注意,下一张图片为白色

snag.gy/GBQgw.jpg

1 个答案:

答案 0 :(得分:0)

在我看来,好像你已经将UITableViewCell子类化了,并添加了一个名为player的属性MPMoviePlayer

我的建议是避免添加控制UIViewController的{​​{1}}中的子视图,并实际让单元格自行处理。

UITableViewCell应该管理它自己的子视图,理想情况下,数据源不应该参与其中。

如果您没有看到自定义tableView的代码,那么很难为您提供有关如何执行此操作的明确建议,但是,如果您正在等待UITableViewCell初始化在添加子视图之前,单元格可以很容易地使用KVO或其他一些方式来驱动玩家控件以找出它何时初始化,然后对其进行操作。