使用 UITableViewController 时,我应该如何实现非弹跳 UITableView?

Posted

技术标签:

【中文标题】使用 UITableViewController 时,我应该如何实现非弹跳 UITableView?【英文标题】:How should I achieve a non-bouncing UITableView when using UITableViewController? 【发布时间】:2012-03-15 23:42:59 【问题描述】:

在我正在开发的 iPad 应用程序中,我想显示一个不滚动且不反弹的 UITableView(这意味着尝试向上或向下滚动 tableview 不会显示滚动和回弹效果)。我想这样做的原因是 UITableView 包含固定数量的单元格,并将可见空间平均分配给单元格数量(tableView:heightForRowAtIndexPath:)。将不需要滚动。 UITableView 和 UIScrollView 是用户不需要知道的实现细节。

UIScrollView 有一个布尔值 bounces 属性,如果我可以访问 UIScrollView 实例,我可以将其设置为 NO

我希望 UITableViewController 的 UITableView 实例具有 UIScrollView 的父视图。但是,在我的 UITableViewController 子类中,self.view.superviewself.tableView.superview 都为零。我已经在我的 UITableViewController 的 -initWithStyle:-viewDidLoad-viewWillAppear: 方法中确定了这一点。

还有其他方法可以访问包含我的 UITableView 的 UIScrollView 吗?我想这种技术将涉及最少的代码,尽管没有从 UITableViewController 或 UITableView 直接访问 UIScrollView 实例的方法。

或者我应该继承 UIViewController 而不是 UITableViewController,并实例化一个未包含在 UIScrollView 中的 UITableView?还是我忽略了其他选择?

【问题讨论】:

Disable UITableView vertical bounces when scrolling的可能重复 【参考方案1】:

UITableViewUIScrollView 的子类,因此UITableView 具有反弹属性(UIScrollView 具有的所有属性)。 所以要取消退回,您需要写self.tableView.bounces = NO;。要取消滚动,self.tableView.scrollEnabled = NO; 当然,您可以使用 Interface Builder 设置此属性。

【讨论】:

另外,Apple 不鼓励在 UIScrollViews 中使用 UIScrollViews,所以如果你在 UIScrollView 中有 UITableView,你可能会看到奇怪的滚动行为。 谢谢;我没想到会这样!我还在 Mac OS X 上使用过 NSTableView,它不是 NSScrollView 的子类。 我将self.tableView.bounces = NO;self.tableView.scrollEnabled = NO; 添加到-initWithStyle:,效果很好!

以上是关于使用 UITableViewController 时,我应该如何实现非弹跳 UITableView?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能使用“List”作为 UITableViewController 子类的类名?

在 UITableViewController 上使用 UIViewController 类

使用带有小型表格的 UITableViewController?

重新加载 UITableViewController

在 UITableViewController 中使用分页

Swift - 使用 UITableViewController 创建子菜单