我在某种特殊的架构中收到“不鼓励在分离 View Controller 上呈现 View Controller ”警告。并且 - 由此产生了一些相当大的用户界面问题。我的 Storyboard中有一个架构,其中有 2 个不同的、不相连的组。第一组是我的应用程序的主界面,包括 UIStackView。第二组由 UIView 和附加的弹出框组成,如下图所示。
我用最多 8 个组 2 的 UIView 实例动态填充组 1 的 UIStackView。这是在 UIStackView 子类中名为 loadViews() 的函数中完成的,该函数根据需要进行调用。以下是经过清理的伪代码以供说明:
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()
每次我在堆栈 View 中嵌入的绿色 View 之一上触发弹出窗口时,我都会收到上面的警告。更重要的是,当在分割 View 模式下在 iPad 上运行时,堆栈 View 每次都会丢失一个绿色 View ,直到没有为止。后者只是一个显示问题,因为刷新时所有 View 都会回来。
我完全被难住了,不知道如何解决这个问题或以不同的方式实现。如果问题是未附加加载的 View ,是否可以“重新附加”它们?或者有没有办法动态加载最多附加 256 个 View 的堆栈 View ?
最佳答案
已解决:
牢记 Xcode 警告的另一个教训 - 即使使用了“不鼓励”这个词。在这种情况下,事情往往会破裂。事后看来,解决方案是显而易见的。实例化为 greenVC 的新 View Controller 必须附加到包含的 View Controller - 即包含此 UIStackView 的 View 层次结构中的上几层:
vcContainingStackView.addChildViewController(greenVC)
上面的行在将 greenVC 附加到我添加的 View Controller 数组之前被调用。当然,现在在删除 GreenVC 实例的地方也必须调用removeFromParentViewController(),但除此之外就是这样了。警告消失了, View 消失的问题也消失了。
关于ios - 动态加载的 UIStackView 上的分离 Controller 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37739712/