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

时间:2011-09-14 03:07:40

标签: iphone ios uitableview scroll

我的iphone应用程序中有一些(分组样式)表格(仅在屏幕的一部分上添加Interface Builder,但不是UITableViewController的子类),80%的时间都很小并将适合在屏幕上。当桌子适合屏幕时,我想禁用滚动,使其更清洁。但如果表格离开屏幕(稍后将行添加到行中),我想再次启用滚动(因为否则您无法看到该内容。)

有办法做到这一点吗?我似乎无法弄明白。我知道这样做:

tableView.scrollEnabled = NO;

但是我不知道在哪里,或者我是否必须计算表格对象的大小或其他东西才能使其工作。

<小时/> 的更新: 这是最终对我有用的解决方案:

if (table.contentSize.height < table.frame.size.height) {
   table.scrollEnabled = NO;
 }
else {
   table.scrollEnabled = YES;
 }

我在表格上调用reloadData后运行此代码,并计算出正确的尺寸并且似乎有效。

table.frame.size.height是屏幕上显示的对象的实际大小(您可以在Interface Builder中看到此内容),而table.contentSize.height是高度:标题,页脚和每个细胞的高度加在一起。

9 个答案:

答案 0 :(得分:358)

我想你要设置

tableView.alwaysBounceVertical = NO;

答案 1 :(得分:42)

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

- (NSArray *)visibleCells

此方法将返回一个包含可见单元格的数组,因此您可以计算此数组中的对象数量并与表格中的对象数量进行比较..如果它相等...您可以禁用滚动使用:

tableView.scrollEnabled = NO;

正如@Ginny所说..我们可能会遇到部分可见单元格的问题,所以在这种情况下这个解决方案效果更好:

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

如果您使用autoLayout,此解决方案可以完成这项工作:

tableView.alwaysBounceVertical = NO.

答案 2 :(得分:32)

在斯威夫特:

tableView.alwaysBounceVertical = false

答案 3 :(得分:12)

试试这个

[yourTableView setBounces:NO];

答案 4 :(得分:9)

您可以通过在“滚动视图”区域中选择/取消选择这些来设置启用/禁用反弹或滚动表格视图

Scroll View editing area

答案 5 :(得分:5)

所以有多个答案,并且一次需要所有内容,所以我要添加这个答案:

如果您使用的是自动版式,则只需设置此项即可为您工作:

  • 在代码中:

tableView.alwaysBounceVertical = false

  • 或在Interface Builder中:

只需找到此选项和untickBounce Vertically”选项即可。

这里是参考:

enter image description here

如果您不使用自动版式:

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

答案 6 :(得分:3)

您可以在故事板中编辑它(如果您使用的话)。在表格视图下方有一个复选框,显示&#34;滚动已启用&#34;。取消选中它,你就完成了。

答案 7 :(得分:1)

// Enable scrolling based on content height self.tableView.scrollEnabled = table.contentSize.height > table.frame.size.height;

答案 8 :(得分:0)

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