在 UIPageController 的当前页面中呈现子视图控制器
Presenting child view controller inside UIPageController's current page
我有一个页面视图控制器,它使用普通的 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 的全屏),此行为正常工作。
有什么想法吗?
好像故事板视图控制器发生了一些事情,因为我能够删除滑块并添加一个新的滑块并且功能在 UIPageViewController 页面内正常工作。
可能是因为你没有给子视图设置约束。
当容器视图大小发生变化时 - 您的子视图超出范围。
您可以使用 Xcode 中的查看调试功能检查它(当您的应用程序处于问题屏幕时,您可以捕获所有视图(菜单调试->查看调试->捕获视图层次结构)并调查发生了什么
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)
我有一个页面视图控制器,它使用普通的 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 的全屏),此行为正常工作。
有什么想法吗?
好像故事板视图控制器发生了一些事情,因为我能够删除滑块并添加一个新的滑块并且功能在 UIPageViewController 页面内正常工作。
可能是因为你没有给子视图设置约束。 当容器视图大小发生变化时 - 您的子视图超出范围。 您可以使用 Xcode 中的查看调试功能检查它(当您的应用程序处于问题屏幕时,您可以捕获所有视图(菜单调试->查看调试->捕获视图层次结构)并调查发生了什么
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)