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

我在我的iphone应用程序中有一些(分组风格)表(仅在屏幕的一部分,并添加了Interface Builder,虽然不是UITableViewController的子类),80%的时间都很小,将适合屏幕。当表格适合屏幕时,我想禁用滚动,让它更干净一点。但是如果表格离开屏幕(当行后来添加到它时),我想再次启用滚动(因为否则您无法看到该内容)。

有办法做到这一点吗?我怎么也想不出来。我知道该怎么做:

tableView.scrollEnabled = NO;

但我不确定在哪里,或者我是否需要计算表对象大小之类的来让它工作。

人力资源/ > < p > < 更新: 下面是最终对我有效的解决方案:

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是的高度:页眉、页脚和每个单元格的高度相加。

177694 次浏览

我认为你想要设置

tableView.alwaysBounceVertical = NO;

tableview单元格的默认高度是44.0f。你必须有你的数据源在数组中?然后检查[array count]*44.0f是否超出帧边界,如果是,则设置tableview.scrollEnabled = NO,否则设置为YES。在你为特定的表视图找到数据源的地方做。

你可以使用这个函数来验证可见单元格的数量:

- (NSArray *)visibleCells

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

tableView.scrollEnabled = NO;

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

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

如果你正在使用自动布局这个解决方案做的工作:

tableView.alwaysBounceVertical = NO.

试试这个

[yourTableView setBounces:NO];

你可以在你的故事板中编辑它(如果你正在使用的话)。在表格视图下,有一个复选框显示“Scrolling Enabled”。取消检查,你就完成了。

迅速:

tableView.alwaysBounceVertical = false

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

滚动视图编辑区

//开启基于内容高度的滚动 self.tableView.scrollEnabled = table.contentSize.height > table.frame.size.height;

所以有多个答案,需要一个全部内容,所以我添加了这个答案:

如果你正在使用自动布局,通过设置这只应该为你工作:

  • 在代码:

tableView.alwaysBounceVertical = false

  • 或在接口生成器中:

只需找到这个选项和untick "Bounce Vertically"选项。

参考资料如下:

enter image description here

如果你没有使用自动布局:

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

这对我来说很管用。

tableView.isUserInteractionEnabled = false