Ios 为什么我的子视图没有添加到我的滚动视图中?
我实现了一个汉堡包菜单,当用户点击一个BarButtonItem时就会调用该菜单 当用户单击菜单的索引时,将调用委托方法并选择正确的行:Ios 为什么我的子视图没有添加到我的滚动视图中?,ios,swift,Ios,Swift,我实现了一个汉堡包菜单,当用户点击一个BarButtonItem时就会调用该菜单 当用户单击菜单的索引时,将调用委托方法并选择正确的行: func rowTapped(index: MenuIndex) { let vc1 = storyboard?.instantiateViewController(withIdentifier: "VC1") as! VC! // lazy loading _ = vc1.self.view
func rowTapped(index: MenuIndex) {
let vc1 = storyboard?.instantiateViewController(withIdentifier: "VC1") as! VC!
// lazy loading
_ = vc1.self.view
vc1.transitionToNew(index)
}
在我的VC1中,会调用**TransitionNew**方法并选择正确的索引:
(假设用户点击了与.a相关联的索引1)
现在,应该将childVC添加到我的VC1的滚动视图中
childVC被实例化为:
private lazy var childVC: ChildVC = {
let viewController = self.storyboard?.instantiateViewController(withIdentifier: "ChildVC") as! ChildVC
return viewController
}()
要将childVC添加到scrollView中,将在switch case语句中调用addSubViewToContainer方法:
private func addSubviewToContainer(asChildViewController viewController: UIViewController)
{
viewController.view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
viewController.view.frame = scrollView.bounds
addChildViewController(viewController)
scrollView.addSubview(viewController.view)
viewController.didMove(toParentViewController: self)
}
我知道视图被实例化为懒惰的,所以我们必须输入
_ = self.view
(尽管这是一个愚蠢的黑客行为)实例化视图,它确实向我显示了我的scrollView已被实例化(至少我认为是因为调试器中的预览向我显示了视图)
有人能在没有看到所有代码的情况下告诉我为什么我的滚动视图中没有添加或显示childVC(!?)
我得到了正确的框架,滚动视图应该在用户点击索引时实例化
更新 我还有一些导航按钮,用户可以选择:
@IBAction func navigateToChildVC(_ sender: UIButton) {
addSubviewToContainer(asChildViewController: childVC)
)
}
它正在调用完全相同的方法,但在这里它正在工作。在您的实现中,滚动视图似乎无法确定其内容大小,因此显式设置它可能会解决您的问题。
scrollView.contentSize=scrollView.bounds.size
行中的某些内容设置了内容大小,以便在两个维度上填充滚动视图-这可能不是滚动视图所需的内容,但这是另一种讨论
在惰性地创建子视图控制器时,也不需要调用addChildViewController,只要在addSubviewToContainer中调用它就足够了。complex hierarchy。。。您能直观地显示吗?谢谢您的输入。我在调试器中检查了该帧,它保持不变。您指的是哪个帧?另外,您可以检查scrollView的内容大小值吗?scrollView的框架。在我的addSubview方法中:viewController.view.frame=scrollView.bounds这应该给我scrollView的边界。scroll视图有一个名为contentSize的属性,它将确定滚动视图将显示多少内容(即它的子视图)。默认情况下,此属性的值为CGSizeZero。即使滚动视图框正确且childVC视图框正确,如果滚动视图内容大小为CGSizeZero,也不会显示滚动视图内容。您能检查您的滚动视图的内容大小值吗?在调用my addChildView方法时打印出滚动视图的内容大小:滚动视图的内容大小:(0.0,0.0)
@IBAction func navigateToChildVC(_ sender: UIButton) {
addSubviewToContainer(asChildViewController: childVC)
)
}