我在我的iphone应用程序中有一些(分组风格)表(只在屏幕的一部分,虽然添加了接口生成器,但不是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是:页眉、页脚和每个单元格的高度相加。


当前回答

这对我来说很管用。

tableView.isUserInteractionEnabled = false

其他回答

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

试试这个

[yourTableView setBounces:NO];

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

- (NSArray *)visibleCells

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

tableView.scrollEnabled = NO;

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

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

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

tableView.alwaysBounceVertical = NO.

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

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