【发布时间】:2020-12-22 06:29:48
【问题描述】:
我有一个针对 iOS8 的应用程序,初始视图控制器是 UISplitViewController。我使用故事板,以便它为我实例化所有内容。
由于我的设计,我需要 SplitViewController 在 iPhone 上以纵向模式显示主视图和详细视图。所以我正在寻找一种方法来覆盖这个 UISplitViewController 的特征集合。
我发现我可以使用
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator!) { ... }
但不幸的是,只有一些方法可以覆盖子控制器的特征集合:
setOverrideTraitCollection(collection: UITraitCollection!, forChildViewController childViewController: UIViewController!)
我不能在我的 UISplitViewController 子类中为 self 这样做。
我查看了来自 Apple 的示例应用程序 Adaptive Photos。在这个应用程序中,作者使用特殊的 TraitOverrideViewController 作为 root 并在他的 viewController 设置器中使用一些魔法来使其一切正常。
这对我来说看起来很可怕。有什么办法可以覆盖特征吗?或者如果没有,我怎样才能设法使用与故事板相同的技巧?换句话说,如何将一些 viewController 作为 root 注入只是为了处理带有情节提要的 UISplitViewController 的特征?
【问题讨论】:
-
为什么看起来很可怕?
AAPLTraitOverrideViewController.m仅仅只有 20 多行代码。将它翻译成 Swift 大概需要 10 分钟,然后你就不必再看一遍了。 -
@Mundi 查看更新。不,我不相信这种代码可以免费维护。最后,现在我需要解释一下我的大学是什么以及我们为什么需要一所。我无法对每一行进行推理,这让我感觉很糟糕。为什么我们需要 didMoveToParentViewController?或者为什么我们需要 shouldAutomaticallyForwardRotationMethods 如果它已被弃用?
-
@Mundi 和示例应用程序没有在加载时检查特征,因此如果您纵向启动它,它将处于错误状态......我上面的代码继承了这个问题。会更新的。
标签: swift uisplitviewcontroller ios8 xcode-storyboard