UIScrollView中的UITableView加载所有单元格

时间:2014-01-02 18:35:24

标签: ios iphone uitableview uiscrollview autolayout

我目前在scrollview中有一个视图,uisegmentedcontrol和另一个视图。最后一个视图根据uisegmentedcontrol中的选定索引在两个uitableview之间交换。为了使所有元素一起滚动,我将uitableview高度设置为与其内容大小相同。但是,当我这样做时,所有单元格都被加载,因为它们在滚动视图中是“可见的”,即使它们在屏幕上不可见。如果存在大的行数,则会锁定屏幕并且在某些电话上加载速度很慢。有没有办法解决?是否有任何方法可以使tableview只调用tableView:cellForRowAtIndexPath:它在屏幕上实际可见而不是在滚动视图中可见?

我知道使用headerView和footerView是一个选项,但这有点奇怪,因为顶视图和uisegementedcontrol对于两个tableviews应该是相同的。我还有其他屏幕,我在uiscrollview中有两个uitableviews(两者都有兄弟视图上下),我需要一起滚动

编辑:这是屏幕上带有两个UITableViews的屏幕布局。一切都将包含在一个滚动视图中:

| ------------------------------- |
| UIView(包含页面标题)|
| ------------------------------ |
| UITableView的
|
|
|
|
|
| ------------------------------
| UIButton
|
| -----------------------------
|
| UITableView的
|
|
|
|
|
|
|
|
| -----------------------------

2 个答案:

答案 0 :(得分:3)

根据我的个人经验,没有办法按你的要求做。由于上述原因,Apple不建议在滚动视图中嵌入tableviews。

可见或被视为可见的内容基于内容大小与可见的rect / content偏移量。 UITableView继承自UIScrollView,它具有动态contentOffset属性。当您在tableview中向上和向下滚动时,此contentOffSet属性会更改,并用于确定要加载的单元格。如果contentOffset与表大小相同,那么它认为整个表都是可见的,并且会立即加载所有单元格。

答案 1 :(得分:0)

如果要切换UITableViews,请从该UITableView中删除页眉和页脚视图,并将它们添加到您要显示的另一个视图中。这样你就不会有重复的顶视图和分段控制问题。

至于你想要让两个表视图一起滚动的另一个问题,最好看一个你希望它看起来像什么的模型,但我认为实现这个的最好方法是使用一个表视图你有一个你设计的自定义单元格,它被分成两部分。然后,当您滚动时,它看起来像两个表格视图一起滚动。

编辑:

根据您对问题的补充,我仍然会说它应该只是一个UITableView。顶部的UIView可能应该是UITableView的标题(但如果你希望它始终可见,则不必是这样),并且你标记为表视图的两个部分应该都是一个表视图。 UIButton可以包含在其间的一个区域中的单元格中,也可以是第二个区域(或顶部区域的页脚)的标题。我可能会把它作为自己部分的单元格。这样,您可以在表格视图中使用三个部分,一个用于顶部表格内容,一个用于按钮,一个用于底部表格内容。