我有一个 TableViewController:
如您所见,我在顶部有自己的自定义栏。UITable View 只是static
一个,我在 UITableView 的顶部添加了一个视图。
问题是当我将 TableView 滚动到顶部时,它变得像下面的图像,我不想要它。有什么简单的代码可以限制tableView的滚动吗?
我有一个 TableViewController:
如您所见,我在顶部有自己的自定义栏。UITable View 只是static
一个,我在 UITableView 的顶部添加了一个视图。
问题是当我将 TableView 滚动到顶部时,它变得像下面的图像,我不想要它。有什么简单的代码可以限制tableView的滚动吗?
由于 UITableView 是 UIScrollView 的子类,因此您可以使用此 UIScrollViewDelegate 方法来禁止在顶部边框上方滚动
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == self.tableView) {
if (scrollView.contentOffset.y < 0) {
scrollView.contentOffset = CGPointZero;
}
}
}
你需要将uitableview的bounce属性设置为NO
UITableView *tableView;
tableView.bounces = NO;
编辑:请注意,您也可以取消选中界面生成器的反弹
请查看此答案以获取更多详细信息滚动时禁用 UITableView 垂直反弹
我遇到了同样的问题,问我们的 UX 设计师,怎么做会更好。他说,两种严格的解决方案(防止弹跳或允许弹跳)都是不好的。最好允许弹跳,但仅限于一些空间
我的解决方案是:
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView == self.tableView {
if scrollView.contentOffset.y < -64 {
scrollView.scrollRectToVisible(CGRect(origin: CGPoint(x: 0, y: -64), size: scrollView.frame.size), animated: false)
scrollView.scrollRectToVisible(CGRect(origin: CGPoint.zero, size: scrollView.frame.size), animated: true)
}
}
}
64
对我来说,那个“空间”在哪里。代码从顶部停止 tableView-64
并用动画显示它。祝你好运!
如果我理解正确,您已将自定义栏设置为表格视图的一部分。设置视图时,将您custom bar
的视图放在单独的视图中,而不是在表格视图中,并将您的表格视图放在自定义栏下方。您需要创建自定义视图控制器,该控制器将具有您的自定义栏和静态表格视图。
您需要将视图控制器对象创建为 typeUIViewController
而不是UITableViewController
. 然后将自定义栏作为子视图添加到self.view
. 创建一个单独的UITableView
并将其添加到自定义栏下方。这应该使自定义栏静态和表格视图可滚动。
更新:
为了使表格视图静态,您需要将其设置为
tableView.scrollEnabled = NO:
让我知道这是否适合您。
Mattias 回答的 Swift 版本:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if (scrollView == self.ordersTable) {
if (scrollView.contentOffset.y < 0) {
scrollView.contentOffset = CGPoint.zero;
}
}
}