代码之家  ›  专栏  ›  技术社区  ›  user6631314

IOS/Objective-C:不受阻碍地滚动代码中创建的tableview(删除橡皮筋效果)

  •  0
  • user6631314  · 技术社区  · 6 年前

    我已经用代码创建了一个tableview,如下所示:

      _myTableView = [[UITableView alloc] initWithFrame:
                                  CGRectMake(160, 80, 140, 100) style:UITableViewStylePlain];
        _myTableView.delegate = self;
        _myTableView.dataSource = self;
        _myTableView.scrollEnabled = YES;
     [self.view addSubview:_myTableView];
    

    -(void) changeTVHeight: (float) height {
    //height calculated from number of items in array returned.
        CGRect newFrame = CGRectMake(120, 80, 180, height);
        self.myTableView.frame = newFrame;
    }
    

    如果没有那么多结果,这对于缩小tableview非常有用。

    但是,如果有很多结果,tableview将在屏幕或键盘的可见部分下面展开。在这种情况下,我希望能够滚动Tableview来查看较低的行。

    scrollEnabled 设置为 YES .

    但是当它允许一个人滚动一点时,滚动是被抵抗的,所以通过努力你可以滚动一点,但是由于 rubber band effect 你不能在屏幕下面超过几行,也不能点击下面几行。

    我在故事板中使用autolayout来处理大部分屏幕。整个屏幕滚动起来很好,但这只会上下移动锚定在屏幕上的tableview。此表视图没有任何约束,但它是作为视图的子视图添加的。

    我的问题是如何使tableview可以滚动,以便它可以无阻力地滚动?

    提前谢谢你的建议。

    编辑 :

    我尝试将tableView添加到self.scrollView而不是self.view。这将tableView锚定到scrollview,因此可以向下滚动整个屏幕并查看tableView的底部。但是,这并不理想,因为屏幕的其余部分是空的,并且您看不到tableview的上下文。(这是屏幕顶部文本字段的自动完成。)

    相反,当tableview添加到self.view时,它在正确的位置,它会半滚动或反弹。它只是没有向下滚动到我需要它滚动的地方。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sean Kladek    6 年前

    您需要设置一个限制,以便表视图不能大于视图本身。Tableviews是在UIScrollView上构建的,可以自己处理滚动,不需要手动调整大小。表视图反弹但不滚动的原因是它在屏幕底部下方延伸。它不会滚动,因为它已经滚动到底部,你只是看不到它,因为它在超级视图之外。

    -(void) changeTVHeight: (float) height {
        CGFloat limitedHeight = MIN(height, self.view.frame.size.height)
        CGRect newFrame = CGRectMake(120, 80, 180, limitedHeight);
        self.myTableView.frame = newFrame;
    }