在UIPageController的当前页面中显示子视图控制器

时间:2016-11-24 21:34:05

标签: ios uipageviewcontroller childviewcontroller

我有一个页面视图控制器,它使用普通的UIPageViewController方法在视图控制器之间转换。在其中一个呈现的视图控制器(比如当前视图控制器)中,我将子视图控制器添加到名为containerView的子视图中,如下所示:

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let child = storyboard.instantiateViewController(withIdentifier: "child")
    self.addChildViewController(child)
    child.view.frame = self.containerView.bounds
    self.containerView.addSubview(child.view)
    child.didMove(toParentViewController: self)

视图控制器显示在containerView内,但它只是半交互式的。例如,假设子视图控制器有一个滑块,用滑块的值更新标签。滑动滑块时,滑块将在containerView内可视移动,但不会更新标签(连接到滑块的IBAction不会运行)。当视图控制器正常显示时(使用正常segueing全屏),此行为可正常工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

似乎故事板视图控制器正在发生一些事情,因为我能够删除滑块并添加一个新的滑块,并且功能在UIPageViewController页面内正常工作。

答案 1 :(得分:0)

也许是因为你没有为子视图设置约束。 当容器视图大小发生变化时 - 您的子视图超出范围。 您可以使用Xcode中的View Debug功能检查它(当您的应用程序处于问题屏幕时,您可以捕获所有视图(菜单Debug-> View debugging-> Capture view hierarchy)并调查会发生什么

child.view.frame = self.containerView.bounds
self.containerView.addSubview(child.view)
// need to add constraint, because if container view resized, child view frame not changed
child.view.autoresizinkMask = [.flexibleHeight, .flexibleWidth]
child.view.translatesAutoresizingMaskIntoConstraints = true
child.didMove(toParentViewController: self)
相关问题