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

Gin*_*nny 228 iphone scroll uitableview ios

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

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

tableView.scrollEnabled = NO;
Run Code Online (Sandbox Code Playgroud)

但我不确定在哪里,或者我是否必须计算表格对象的大小或其他东西才能使其发挥作用.


更新:这是最终为我工作的解决方案:

if (table.contentSize.height < table.frame.size.height) {
   table.scrollEnabled = NO;
 }
else {
   table.scrollEnabled = YES;
 }
Run Code Online (Sandbox Code Playgroud)

我在调用reloadData表后运行此代码,它计算出正确的大小并且似乎有效.

table.frame.size.heightInterface Builder屏幕上显示的对象的实际大小(您可以看到这一点),而table.contentSize.height高度是:标题,页脚和每个单元格的高度加在一起.

Lil*_*ard 378

我想你想要设定

tableView.alwaysBounceVertical = NO;
Run Code Online (Sandbox Code Playgroud)

  • 对于Swift - **tableView.alwaysBounceVertical = false** (8认同)
  • 使用AutoLayout时,这比contentSize <frame更好.应该接受答案. (5认同)
  • 就像魅力一样,您也可以通过取消弹跳和水平/垂直弹跳来从"界面构建器"中禁用它. (4认同)
  • 比禁用滚动更好 (2认同)

Rob*_*raz 44

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

- (NSArray *)visibleCells
Run Code Online (Sandbox Code Playgroud)

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

tableView.scrollEnabled = NO;
Run Code Online (Sandbox Code Playgroud)

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

tableView.scrollEnabled = (tableView.contentSize.height <= CGRectGetHeight(tableView.frame));
Run Code Online (Sandbox Code Playgroud)

如果你使用autoLayout这个解决方案做的工作:

tableView.alwaysBounceVertical = NO.
Run Code Online (Sandbox Code Playgroud)

  • 弄清楚了!原来你根本不能真正使用visibleCells,因为部分可见的单元格问题,但这有效:`if(table.contentSize.height <table.frame.size.height)`>>请参阅原始帖子中的编辑. (6认同)

Nat*_*iaz 37

在Swift中:

tableView.alwaysBounceVertical = false
Run Code Online (Sandbox Code Playgroud)

  • 我总是赞成这样的"重写",因为转换成现代语法需要时间. (17认同)

cod*_*cat 12

试试这个

[yourTableView setBounces:NO];
Run Code Online (Sandbox Code Playgroud)


Aki*_*ala 9

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

滚动视图编辑区域


Hem*_*ang 8

因此,存在多个答案,并且一次需要所有内容,因此我添加了以下答案:

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

  • 在代码中:

tableView.alwaysBounceVertical = false

  • 或在Interface Builder中:

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

这是参考:

在此处输入图片说明

如果您不使用自动版式:

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


rjo*_*don 5

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

  • 我想我读了你的解决方案后开悟了。非常感谢 (4认同)
  • 我的意思是 viewDidLayoutSubviews 不是 viewDidAppear (2认同)