动态加载的 UIStackView 上的分离控制器问题

Detached Controller Issues on a Dynamically Loaded UIStackView

我在某种特定的体系结构中收到 "Presenting view controllers on detached view controllers is discouraged" 警告。并且 - 它导致了一些相当大的 UI 问题。我的故事板中有一个架构,其中包含 2 个不同的未连接组。第一组是我的应用程序的主界面,包括一个 UIStackView。第二组包含一个 UIView 加上附加的 popover segue,如下图所示。

我使用组 2 的 UIView 的最多 8 个实例动态填充组 1 的 UIStackView。这是在 [=28] 中调用 loadViews() 的函数中完成的=] StackView 子类,根据需要调用。这是清理后的伪代码以供说明:

for i in 0 ..< green.count {

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let greenVC = storyboard.instantiateViewControllerWithIdentifier("greenViewController") as! GreenVC 
    greenVC.progressionStackView = self
    greenVC.index = i;

    greenViewControllers.append(greenVC)

    if let greenView = greenVC.view as! GreenView! {
        greenView.fillColor = UIColor.orangeColor()
        greenView.setNeedsDisplay()
        self.addArrangedSubview(greenView)
    }
}

self.layoutIfNeeded()

每次我在堆栈视图中的一个嵌入式绿色视图上触发弹出窗口时,我都会收到上面的警告。更重要的是,当 运行 在拆分视图模式下的 iPad 上时,堆栈视图每次都会失去绿色视图,直到剩下 none。后者只是一个显示问题,因为刷新时所有视图都会返回。

我完全被难住了,不知道如何解决这个问题或以不同的方式实施。如果问题是没有附加加载的视图,它们可以是 "re-attached" 吗?或者有没有办法动态加载最多附加 256 个视图的堆栈视图?

已解决:

将 Xcode 警告牢记于心的又一教训 - 即使使用了“劝阻”一词。在这种情况下,事情往往会破裂。事后看来,解决方案是显而易见的。实例化为 greenVC 的新视图控制器必须附加到包含视图控制器 - 即视图层次结构中包含此 UIStackView 的几层:

vcContainingStackView.addChildViewController(greenVC)

在将 greenVC 附加到我添加的视图控制器数组之前调用上面的行。当然,现在也必须在删除 GreenVC 实例的地方调用 removeFromParentViewController(),但除此之外就是这样。警告消失了,视图消失的问题也消失了。