IOS/Objective-C:在代码中创建的 tableview 的无阻碍滚动(去除橡皮筋效果)
IOS/Objective-C: Unhindered scrolling of tableview created in code (remove rubber band effect)
我在代码中创建了一个table视图,如下所示:
_myTableView = [[UITableView alloc] initWithFrame:
CGRectMake(160, 80, 140, 100) style:UITableViewStylePlain];
_myTableView.delegate = self;
_myTableView.dataSource = self;
_myTableView.scrollEnabled = YES;
[self.view addSubview:_myTableView];
除了以下例外情况,它基本上可以正常工作。由于 table 中的结果不同,我手动调整 table 视图的高度,使其只占用返回行所需的 space 如下:
-(void) changeTVHeight: (float) height {
//height calculated from number of items in array returned.
CGRect newFrame = CGRectMake(120, 80, 180, height);
self.myTableView.frame = newFrame;
}
如果结果不多,这对于缩小 table 视图非常有效。
但是,如果有很多结果,table视图会扩展到屏幕或键盘的可见部分下方。在这种情况下,我希望能够滚动 Tableview 以查看下方的行。
scrollEnabled
设置为 YES
。
但是虽然它确实允许滚动一点,但滚动会受到阻力,因此您可以努力滚动一点,但是由于 rubber band effect 您不能超出屏幕下方的几行,并且您不能点击下面的行。
我在情节提要中为大部分屏幕使用了自动版式。整个屏幕滚动良好,但这只会上下移动锚定在屏幕上的 table 视图。此 table 视图没有任何限制,但它是作为视图的子视图添加的。
我的问题是如何使 table 视图可滚动,以便滚动时没有阻力?
提前感谢您的任何建议。
编辑:
我尝试将 tableView 添加到 self.scrollView 而不是 self.view。这将 tableView 锚定到滚动视图,因此可以向下滚动整个屏幕并查看 tableView 的底部。然而,这并不理想,因为屏幕的其余部分向下是空的,您看不到 table 视图的上下文。 (这是屏幕顶部文本字段的自动完成。)
相比之下,当 table 视图添加到 self.view 时,它位于正确的位置,它会半滚动或弹跳。它只是不向下滚动到我需要它滚动的地方。
您需要设置一个限制,使 table 视图不能大于视图本身。 Tableviews 是建立在 UIScrollView 之上的,并且会自己处理滚动,你不需要尝试手动调整它的大小。 table 视图反弹但不滚动的原因是因为它延伸到屏幕底部以下。它不会滚动,因为它已经滚动到底部,你只是看不到它,因为它在父视图之外。
-(void) changeTVHeight: (float) height {
CGFloat limitedHeight = MIN(height, self.view.frame.size.height)
CGRect newFrame = CGRectMake(120, 80, 180, limitedHeight);
self.myTableView.frame = newFrame;
}
我在代码中创建了一个table视图,如下所示:
_myTableView = [[UITableView alloc] initWithFrame:
CGRectMake(160, 80, 140, 100) style:UITableViewStylePlain];
_myTableView.delegate = self;
_myTableView.dataSource = self;
_myTableView.scrollEnabled = YES;
[self.view addSubview:_myTableView];
除了以下例外情况,它基本上可以正常工作。由于 table 中的结果不同,我手动调整 table 视图的高度,使其只占用返回行所需的 space 如下:
-(void) changeTVHeight: (float) height {
//height calculated from number of items in array returned.
CGRect newFrame = CGRectMake(120, 80, 180, height);
self.myTableView.frame = newFrame;
}
如果结果不多,这对于缩小 table 视图非常有效。
但是,如果有很多结果,table视图会扩展到屏幕或键盘的可见部分下方。在这种情况下,我希望能够滚动 Tableview 以查看下方的行。
scrollEnabled
设置为 YES
。
但是虽然它确实允许滚动一点,但滚动会受到阻力,因此您可以努力滚动一点,但是由于 rubber band effect 您不能超出屏幕下方的几行,并且您不能点击下面的行。
我在情节提要中为大部分屏幕使用了自动版式。整个屏幕滚动良好,但这只会上下移动锚定在屏幕上的 table 视图。此 table 视图没有任何限制,但它是作为视图的子视图添加的。
我的问题是如何使 table 视图可滚动,以便滚动时没有阻力?
提前感谢您的任何建议。
编辑:
我尝试将 tableView 添加到 self.scrollView 而不是 self.view。这将 tableView 锚定到滚动视图,因此可以向下滚动整个屏幕并查看 tableView 的底部。然而,这并不理想,因为屏幕的其余部分向下是空的,您看不到 table 视图的上下文。 (这是屏幕顶部文本字段的自动完成。)
相比之下,当 table 视图添加到 self.view 时,它位于正确的位置,它会半滚动或弹跳。它只是不向下滚动到我需要它滚动的地方。
您需要设置一个限制,使 table 视图不能大于视图本身。 Tableviews 是建立在 UIScrollView 之上的,并且会自己处理滚动,你不需要尝试手动调整它的大小。 table 视图反弹但不滚动的原因是因为它延伸到屏幕底部以下。它不会滚动,因为它已经滚动到底部,你只是看不到它,因为它在父视图之外。
-(void) changeTVHeight: (float) height {
CGFloat limitedHeight = MIN(height, self.view.frame.size.height)
CGRect newFrame = CGRectMake(120, 80, 180, limitedHeight);
self.myTableView.frame = newFrame;
}