我有一个页面视图控制器,它使用普通的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全屏),此行为可正常工作。
有什么想法吗?
答案 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)