首页 文章

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

提问于
浏览
205

我的iphone应用程序中有一些(分组样式)表格(仅在屏幕的一部分上添加了 Interface Builder ,而不是 UITableViewController 的子类),80%的时间都很小并且适合屏幕 . 当表格适合屏幕时,我想再次启用滚动(因为否则您无法看到该内容 . )

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

tableView.scrollEnabled = NO;

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


Update :这是最终对我有用的解决方案:

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 是高度: Headers ,页脚和每个单元格的高度加在一起 .

9 回答

  • 345

    我想你想要设定

    tableView.alwaysBounceVertical = NO;
    
  • 1

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

    - (NSArray *)visibleCells
    

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

    tableView.scrollEnabled = NO;
    

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

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

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

    tableView.alwaysBounceVertical = NO.
    
  • 11

    在Swift中:

    tableView.alwaysBounceVertical = false
    
  • 0

    试试这个

    [yourTableView setBounces:NO];
    
  • 1

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

    Scroll View editing area

  • 3

    您可以在故事板中编辑它(如果您使用的话) . 在表格视图下,有一个复选框,上面写着“滚动已启用” . 取消选中它就完成了 .

  • 40

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

  • 29

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

    If you're using AutoLayout, by setting this only should work for you:

    • 在代码中:

    tableView.alwaysBounceVertical = false

    • 或在Interface Builder中:

    只需找到此选项并选择 untickBounce Vertically ” .

    这是参考:

    enter image description here

    If you're not using AutoLayout:

    func viewDidLayoutSubviews() {
        // Enable scrolling based on content height
        self.tableView.scrollEnabled = tableView.contentSize.height > tableView.frame.size.height
     }
    
  • 8

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

相关问题