UIPageViewController:如何添加非分页工具栏或其他“覆盖”元素?

Posted

技术标签:

【中文标题】UIPageViewController:如何添加非分页工具栏或其他“覆盖”元素?【英文标题】:UIPageViewController: how to add a non-paging toolbar or other "overlay" elements? 【发布时间】:2012-04-26 15:19:33 【问题描述】:

我已经实现了一个 PDF 查看器。目前它是一个UIViewController,其中包含一个UIPageViewController。 我的工具栏、一些覆盖元素(例如快速访问 PDF 的某些页面)被添加到标准的UIViewController's 视图中。 但是我想知道这是否需要?是否有可能从UIPageViewController继承并具有子控制器的分页效果,并且顶部仍然有“浮动”元素不会被分页? 还是要采取收容措施?

【问题讨论】:

【参考方案1】:

我们应该以编程方式创建UIPageViewController,并将其视图作为子视图添加到另一个UIViewController 的视图中。而我们希望它们“覆盖”的元素应该是主机UIViewController 的子视图。

例如在- viewDidLoad:

UIPageViewController *pvc = // init this on your own way
pvc.dataSource = // your data source

// Set page view controller's view's frame to match host view's frame
pvc.view.frame = self.view.bounds;

// And here comes the magic
[self.view insertSubView:pvc.view belowSubview:<any subview>];

简单地说,我们只使用UIPageViewController 的视图而不是它自己。

希望这会有所帮助。

【讨论】:

请注意,SO 更像是一个问答资源,而不是帮助论坛,因此问题是否过时或者提问者是否仍然感兴趣并不重要。为遇到相同问题并在搜索中找到该主题的其他人发布答案完全符合 SO 的使命,如果尚未发布合适的答案,我们强烈建议您这样做。 这就是我所说的视图控制器包含的肮脏解决方案。您只是将一个视图控制器视图添加到另一个视图中,而不是使用正确的方法。 这是一个合法的答案,可以让您添加非分页工具栏或其他“覆盖”元素。所以它提供了。因为这是被问到的。 @Cad 它可能会遇到与 UIController 事件相关的各种问题,例如旋转。我已经有两个控制器,它们使用 UIViewController 容器。将视图作为子视图注入与此没有什么不同,但仍然是错误的方法。 视图控制器包含和“子视图”被认为是相同的,但它是一个有效的解决方案,只是尝试旋转,它可以工作。考虑任何可能的性能问题,但这只是将视图从一个更改为另一个。我想知道你为什么认为这是一种错误的做法。

以上是关于UIPageViewController:如何添加非分页工具栏或其他“覆盖”元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIPageViewcontroller 中添加两个视图控制器

如何使用自动布局(约束)将子视图添加到 UIPageViewController?

点击 UIButton 后如何在 UIPageViewController 中添加新的视图控制器?

用户到达最后一页后,如何将新页面添加到 UIPageViewController?

如何在UIPageViewController顶部添加按钮?

如何设置 UIPageViewController(分页类型)手势委托