使用 UITableViewController 时如何让 pickerView 粘在底部?

Posted

技术标签:

【中文标题】使用 UITableViewController 时如何让 pickerView 粘在底部?【英文标题】:How to make pickerView stick to the bottom when using UITableViewController? 【发布时间】:2014-03-24 14:38:06 【问题描述】:

我有相当大的由文本字段组成的 UITableViewController。我需要在屏幕底部展示我的pickerView。 pickerView 的问题是它在表格滚动时滚动(因为我已将它作为子视图添加到 tableView)。我看到的唯一选择是将此 pickerView 添加到窗口:

UIWindow *window = [[UIApplication sharedApplication] keyWindow];
[window addSubview:view];

但是,不确定这一点,它看起来像一个 hack。使用 ios6+ 安全吗?有没有人有更优雅的解决方案将pickerView添加到tableView的底部并使其粘在底部?

在storyboards之前,我一直使用通用的UIViewController而不是UITableViewController,但是我现在的项目使用的是storyboards和静态表格视图,所以我不能使用通用的UIViewController。我对 UITableViewController 不满意的主要原因是它的 tableView 是根视图,并且您可能会运行一些令人讨厌的问题(包括这个)。例如,您不能将任何视图放在中心顶部,因为将视图添加为子视图将最终将此视图放置在表格内容中而不是上方。因此活动指示器和其他自定义视图不能停留在中心,因为如果您滚动 tableView,那么这些视图也会滚动。在窗口内添加顶视图的解决方案通过代码工作,但您仍然无法通过情节提要添加它。

【问题讨论】:

【参考方案1】:

您应该问自己的第一个问题:您真的需要一张桌子吗?使用滚动视图可能会好得多,具体取决于表包含的内容及其内容的动态程度。

下一步:如果你需要一个桌子,也需要选择器,你想固定在屏幕的底部,那么我建议如下:

    创建一个UIViewController contollerWithPicker 来保存选择器和一个容器视图tableContainer。 仅为您的表格及其内容创建UITableViewControllermyTableController。 将 myTableController 分配给 tableContainer。 根据您的需要,您可能希望使用 contollerWithPicker 或 myTableContoller 作为表的数据源。两者都很好用。有时一个更容易实现和维护,有时另一个。

但不要尝试将表格视图与外部的固定 UI 元素混合在一起,并且在同一视图中独立于表格。

............ 如果它位于屏幕顶部,在表格上方,那么您可以将选择器放置在表格的标题视图中。

【讨论】:

使用scrollView的一个很好的点。然而,为了使用 ScrollView (developer.apple.com/library/ios/technotes/tn2154/_index.html),我们需要一些关于 contentSize 的代码设置。此外,当键盘出现在 tableView 的合同中时,scrollView 不会自动调整大小。因此,与普通的 ScrollView 相比,目前的 tableView 内部肯定有一些好东西。

以上是关于使用 UITableViewController 时如何让 pickerView 粘在底部?的主要内容,如果未能解决你的问题,请参考以下文章

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

在 UITableViewController 上使用 UIViewController 类

使用带有小型表格的 UITableViewController?

重新加载 UITableViewController

在 UITableViewController 中使用分页

Swift - 使用 UITableViewController 创建子菜单