Iphone 当内容适合屏幕时,如何在UITableView表中禁用滚动

Iphone 当内容适合屏幕时,如何在UITableView表中禁用滚动,iphone,ios,uitableview,scroll,Iphone,Ios,Uitableview,Scroll,我的iphone应用程序中有一些(分组样式)表格(仅在部分屏幕上,并添加了Interface Builder,而不是UITableViewController的子类),这些表格80%的时间都很小,可以放在屏幕上。当表格放在屏幕上时,我想禁用滚动,使它更干净一点。但是,如果表格离开屏幕(稍后添加行时),我希望再次启用滚动(否则您将无法看到该内容) 有办法做到这一点吗?我似乎不明白。我知道该怎么做: tableView.scrollEnabled = NO; 但是我不确定在哪里,或者我是否必须计算

我的iphone应用程序中有一些(分组样式)表格(仅在部分屏幕上,并添加了
Interface Builder
,而不是
UITableViewController
的子类),这些表格80%的时间都很小,可以放在屏幕上。当表格放在屏幕上时,我想禁用滚动,使它更干净一点。但是,如果表格离开屏幕(稍后添加行时),我希望再次启用滚动(否则您将无法看到该内容)

有办法做到这一点吗?我似乎不明白。我知道该怎么做:

tableView.scrollEnabled = NO;
但是我不确定在哪里,或者我是否必须计算表对象的大小或者其他什么来让它工作


更新: 以下是最终对我有效的解决方案:

if (table.contentSize.height < table.frame.size.height) {
   table.scrollEnabled = NO;
 }
else {
   table.scrollEnabled = YES;
 }
if(table.contentSize.height
我在调用表上的
reloadData
后运行了这段代码,它计算出了正确的大小,并且似乎正常工作


table.frame.size.height
是屏幕上显示的对象的实际大小(您可以在
Interface Builder
中看到),而
table.contentSize.height
是页眉、页脚和每个单元格加在一起的高度。

tableView.alwaysBounceVertical = NO;

我认为tableview单元格的默认高度是44.0f。您必须将数据源放在数组中?然后只需检查
[array count]*44.0f
是否超出了帧边界,如果超出了帧边界,则设置
tableview.scrollEnabled=NO
,否则将其设置为YES。在为特定tableview计算数据源的位置执行此操作。

您可以使用此功能验证可见单元格的数量:

- (NSArray *)visibleCells
此方法将返回一个包含可见单元格的数组,因此您可以计算此数组中的对象数,并与表中的对象数进行比较。。如果相等的话。。您可以使用以下方法禁用滚动:

tableView.scrollEnabled = NO;
正如@Ginny提到的。。我们可能会遇到部分可见单元格的问题,因此此解决方案在这种情况下效果更好:

tableView.scrollEnabled = (tableView.contentSize.height <= CGRectGetHeight(tableView.frame));
试试这个

[yourTableView setBounces:NO];

您可以在故事板中编辑此内容(如果您正在使用)。在表格视图下有一个复选框,上面写着“已启用滚动”。取消选中即可完成操作。

在Swift中:

tableView.alwaysBounceVertical = false

通过在滚动视图区域中选择/取消选择这些选项,可以设置启用/禁用弹跳或滚动tableview


//启用基于内容高度的滚动

self.tableView.scrollEnabled=table.contentSize.height>table.frame.size.height

因此有多个答案,并且需要一次放置所有内容,因此我添加此答案:

如果您使用的是AutoLayout,则设置此选项只适用于您:

 override func viewDidLayoutSubviews() {
    // Enable scrolling based on content height
    tableView.isScrollEnabled = tableView.contentSize.height > tableView.frame.size.height
 }
  • 代码:
tableView.alwaysBounceVertical=false

  • 或在界面生成器中:
只需找到此选项和
取消勾选
垂直反弹
”选项

以下是参考资料:

如果不使用自动布局:

 override func viewDidLayoutSubviews() {
    // Enable scrolling based on content height
    tableView.isScrollEnabled = tableView.contentSize.height > tableView.frame.size.height
 }

我的表格单元格大小不同(并且可能随时改变大小;我使用的是heightforrowatinexpath方法),因此我可能不想硬编码44.0f。我相信这个数字和tableView.rowHeight是一样的,那么你就可以用这个方法计算总高度了。简单对吧?如果超出屏幕范围,请启用滚动,否则将其禁用。将为所有可见单元格调用该方法。如果您没有足够的数据超过屏幕,您可以使用该方法计算总高度。不断地将每次调用时返回的高度添加到全局变量中,您就得到了您的总高度。Roberto的回答是实现所有这些并将计算留给tableview的更简单的方法。谢谢!这对我来说是最有效的。我现在唯一的问题是,当单元格部分可见时,它们仍然被视为可见,因此当我希望它被启用时,滚动被禁用。解决了!事实证明,由于部分可见单元格的问题,您根本无法使用VisibleCell,但这是可行的:
if(table.contentSize.height
>请参阅原始帖子中的编辑。谢谢。这个解决方案对我有效。然而,我最终扩展了UITableView并覆盖了重载数据以禁用scrollEnabled。原因是在创建“我的视图”控制器时加载了表视图。这样你就不必调用重载数据两次了。@JoeBlow我想你没有领会OP的意思。问题不在于如何禁用反弹,而在于如何仅在tableview需要滚动时启用滚动(最有可能是反弹)。使用边界可能更好,因为我认为如果你稍微旋转一下桌子,frame.height就会改变。应该有:如果(table.contentSize.height当您使用自动布局时,此选项比contentSize