动态加载的 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(),但除此之外就是这样。警告消失了,视图消失的问题也消失了。
我在某种特定的体系结构中收到 "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(),但除此之外就是这样。警告消失了,视图消失的问题也消失了。