【问题标题】:UIPageViewController in Contrainer View容器视图中的 UIPageViewController
【发布时间】:2017-09-04 21:13:52
【问题描述】:

我正在尝试将 UIPageViewController 嵌入到容器视图中。 ContainerView 的布局如下:

它由 UIViewController 组成,其中包含容器视图和底部的 2 个按钮。

Container View 和 UIPageViewController 之间的连接是通过“embed segue”建立的。

UIPageViewController 管理 3 个 UIViewController。每个 UIViewController 代表应用演练教程屏幕,并具有以下布局:

问题:当我运行应用程序时,第一个演练屏幕看起来应该是这样,这意味着所有布局元素都正确显示:

但是,当我滚动到下一个演练屏幕时,仅显示 UIImageView,将位于其下方的其他两个标签向下推到框架之外:

我想知道容器视图如何显示由 UIPageViewController 管理的 UIViewControllers 的所有元素?

【问题讨论】:

  • 据我了解,您提供了太多不相关的信息。仅提供有关您要向其中添加子类的视图的信息。还显示您期望的图像和当前结果。您添加的第 3 和第 4 张图片似乎不属于同一页面!
  • 第三张图片显示了我的期望,第四张图片显示了我实际得到的。第 4 张图片,只有 UIImageView 可见,其他 2 个标签被下推,出名了。

标签: ios swift uipageviewcontroller


【解决方案1】:

您不应将 imageView 的底部约束设置为0。您应该将其约束到标题的顶部锚点。同样,您应该将标题的底部设置为描述顶部。并将描述底部设置为其父视图的底部。

【讨论】:

  • 不接缝工作。按照您的建议尝试,仍然给我同样的东西。在我的 UIPageViewController 中,我在惰性属性(数组)中创建演练屏幕 UIViewControllers,它们在属性本身而不是 viewDidLoad 方法中被实例化,是否有可能必须做任何事情?这意味着每个视图控制器都在后台实例化,甚至在它们出现在屏幕上之前。
  • 有一点需要注意,当我旋转屏幕并旋转回来时,所有的 UIViewControllers 都会正确显示。
  • 你应该把它们设置在viewDidLoad里面init方法太早了,视图还没有加载到屏幕上
  • 它们仍然相同,但是,也许这是正确的方向。我有一个属性数组 orderViewControllers 来存储演练屏幕,然后在 viewDidLoad 中创建 3 个演练屏幕 UIViewControllers 并将它们添加到orderedViewControllers 数组中。但是,只显示第一个,其他 2 个在显示之前仍然创建。也许只有在滚动到下一个视图控制器时才创建它,才能解决问题,你认为呢?
【解决方案2】:

我已经解决了这个问题,方法是将教程屏幕的内容放在垂直堆栈视图中,并赋予 UIImageView 较小的内容压缩阻力优先级

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多