Ipad 水平滚动UITableView时的奇怪行为(在Monotouch中)

Ipad 水平滚动UITableView时的奇怪行为(在Monotouch中),ipad,uitableview,xamarin.ios,horizontal-scrolling,Ipad,Uitableview,Xamarin.ios,Horizontal Scrolling,我们有一个UITableView,我们已经将其配置为类似于网格,允许水平和垂直滚动。我们通过在自定义UITableView的LayoutSubviews方法中动态更改ContentSize来实现这一点,该方法有助于自动旋转、滚动等 除了在几个较大的网格上,其他一切都按预期工作。当水平滚动这些网格时(向左滑动),只要ContentOffset.X大于或等于Bounds.Width,表格视图就会消失。它仍然存在并接收输入,但没有绘制任何内容。向后向右滑动时,一旦超过宽度阈值,所有内容都将重新绘制 如

我们有一个UITableView,我们已经将其配置为类似于网格,允许水平和垂直滚动。我们通过在自定义UITableView的LayoutSubviews方法中动态更改ContentSize来实现这一点,该方法有助于自动旋转、滚动等

除了在几个较大的网格上,其他一切都按预期工作。当水平滚动这些网格时(向左滑动),只要ContentOffset.X大于或等于Bounds.Width,表格视图就会消失。它仍然存在并接收输入,但没有绘制任何内容。向后向右滑动时,一旦超过宽度阈值,所有内容都将重新绘制

如果网格大小小于配置的UITableView宽度的一半,则不会出现此问题。我们无法更改网格的大小,因为网格是由希望数据可用的现场客户配置的


我已经检查和/或删除了尽可能多的自定义绘图代码,问题仍然存在。有人有什么想法吗?

这是因为尽管UITableView继承自UIScrollView,但它只具有一个列,因此它根据其边界绘制单元格


如果您想使用UITableView创建一个类似网格的控件,我建议您在父UIScrollView中并排使用多个表视图,并更改其ContentSize。

我遇到了同样的问题,并于12月在Apple开发者网站上发布了一份错误报告(10561166

我今天收到苹果公司的回复,他们在回复中说

UITableView不是为水平滚动而设计或设计的


(后来我改变了设计,不需要水平滚动。)

因为UITableView继承了UIScrollView,将子视图添加到UITableView,然后设置UITableView的ContentSize,提供了与您建议的完全相同的解决方案,并增加了本机UITableView单元格重复使用的好处,这在大型列表中非常关键。您希望将哪种子视图添加到UITableView?其他表视图?由于我们在模拟网格,每个子视图在逻辑上是一列数据,在编程上是一个UILabel。与UIScrollView相比,滥用UITableView的优势是什么?并根据您的需要实现真正的多列解决方案?使用UITableView的优势主要是单元重用。我们的用户可以在一个5-20列的给定列表中拥有数千条记录。如果我们实现了滚动视图,我们必须将表格视图调整到其完整大小,以便滚动视图能够正确滚动,因此必须创建每个单元格。如果我回想一下我在90年代末做的游戏编程,我们在滚动到底部的每一位上,都在隐藏的顶部创建了下一个屏幕行。如果滚动一个屏幕高度,则会重置烧焦偏移量,并已填充下一个屏幕。这在上下滚动时也起作用。我认为同样的技术也适用于这里。但这确实比使用UITableView需要更多的工作。