Ios UITableView与自定义单元格子视图一起滚动
我在Ios UITableView与自定义单元格子视图一起滚动,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我在UITableView滚动时遇到以下问题。 在我的设置中,每个部分有2行,每个部分都有UITableView的完整框架。 如果我在第二个单元格的contentView中添加某个viewController的子视图,如 if (![cell.contentView.subviews containsObject:cell.player.view]) { [cell.contentView addSubview:cell.player.view]; } (此处,cell.player是
UITableView
滚动时遇到以下问题。
在我的设置中,每个部分有2行
,每个部分都有UITableView
的完整框架。
如果我在第二个单元格的contentView
中添加某个viewController
的子视图
,如
if (![cell.contentView.subviews containsObject:cell.player.view]) {
[cell.contentView addSubview:cell.player.view];
}
(此处,cell.player
是已初始化的MPMoviePlayer
控件),
在滚动到下一个部分
期间,第一个单元格
将为白色,直到滚动完成
现在,我注意到这与addSubview
函数有关,因为无论我添加什么视图,它都显示相同的行为。我可以通过实施
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
/// detect cell
[cell.contentView.subviews[0] setHidden:YES];
}
或者从ScrollView中的superview
中将其删除,将使其变为
,但是如果该视图突然消失,则看起来非常奇怪。
它只发生在包含自定义子视图的单元格上(对于没有自定义子视图的单元格,则
工作顺利)
我的问题是,是否有人知道如何在滚动期间避免出现白色区域,而不在滚动之前删除/隐藏视图
为了获得更好的视觉线索,这里有一个屏幕截图,如果我不添加子视图
:
还有一个屏幕截图。请注意,下一个图像是白色的
在我看来,您似乎已经对UITableViewCell
进行了子类化,并添加了一个名为player
的属性,即MPMoviePlayer
我的建议是避免添加来自UIViewController
控制tableView
的子视图,而是让单元格自己处理这个问题
UITableViewCell应该管理自己的子视图,理想情况下,数据源不应该参与其中
如果不查看自定义UITableViewCell
的代码,就很难向您提供关于如何执行此操作的可靠建议,但是,如果您在添加子视图之前等待MPMoviePlayer
进行初始化,该单元可以很容易地使用KVO或其他方式驱动播放器控件,以确定其初始化时间,然后对其进行操作。直接修改单元的内容视图可能会导致一些问题。尝试使用可由播放器设置的自定义UITableViewCell子类。好吧,我确实使用了带有UIViewController
属性的子类UITableViewCell
。我试图避免将任何控制器代码放入UITableViewCell
中,并让UITableView
/customUIViewController
管理单元格中的内容。目前,我在单元格初始化时初始化视图控制器,并在发现单元格不包含子视图时在cellforrowatinexpath
中添加其子视图。解决方案基本上是将控制器中初始化的所有控件移动到UITableViewCell,正如@infinity james建议的那样。非常感谢。