我的 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
是高度:页眉、页脚和每个单元格的高度相加。
我想你想设置
tableView.alwaysBounceVertical = NO;
在斯威夫特:
tableView.alwaysBounceVertical = false
您可以使用此函数验证可见单元格的数量:
- (NSArray *)visibleCells
此方法将返回一个包含可见单元格的数组,因此您可以计算此数组中的对象数并与表中的对象数进行比较.. 如果相等.. 您可以使用以下方法禁用滚动:
tableView.scrollEnabled = NO;
正如@Ginny 提到的......我们可能会遇到部分可见单元格的问题,所以这个解决方案在这种情况下效果更好:
tableView.scrollEnabled = (tableView.contentSize.height <= CGRectGetHeight(tableView.frame));
如果您使用的是 autoLayout,这个解决方案可以完成这项工作:
tableView.alwaysBounceVertical = NO.
if (table.contentSize.height < table.frame.size.height)
>>请参阅原始帖子中的编辑。
所以有多个答案,需要一次所有内容,所以我添加了这个答案:
如果您使用的是 AutoLayout,则通过设置仅对您有用:
在代码中:
tableView.alwaysBounceVertical = false
或在界面生成器中:
只需找到此选项和 untick
"Bounce Vertically
" 选项。
这是参考:
https://i.stack.imgur.com/o3cx6.png
如果您不使用自动布局:
override func viewDidLayoutSubviews() {
// Enable scrolling based on content height
tableView.isScrollEnabled = tableView.contentSize.height > tableView.frame.size.height
}
尝试这个
[yourTableView setBounces:NO];
您可以通过在滚动视图区域中选择/取消选择这些来设置启用/禁用反弹或滚动表格视图
https://i.stack.imgur.com/x6Ym0.png
// Enable scrolling based on content height self.tableView.scrollEnabled = table.contentSize.height > table.frame.size.height;
您可以在情节提要中编辑它(如果您正在使用它)。在表格视图下有一个复选框,上面写着“启用滚动”。取消选中它,你就完成了。
我相信的 tableview 单元格的默认高度是 44.0f。您必须将数据源放在数组中吗?然后只需检查 [array count]*44.0f
是否超出帧边界,如果是则设置 tableview.scrollEnabled = NO
,否则将其设置为 YES。在您为该特定表格视图找出数据源的地方执行此操作。
interface builder
禁用它。