0

我有一个要启用拆分视图的应用程序。iPhone 与 iPad 的 UI 略有不同(紧凑与常规宽度)。

在紧凑宽度模式下,我有一个 UITableView,其中包含用户可以选择的项目列表,当他们这样做时,我将一个新的 View Controller 推送到导航堆栈上。但是,在常规宽度中,UITableView 列表显示在左侧,然后我在右侧有一些其他视图(未在 UISplitViewController 中实现)。所以我在 2 个不同的 ViewController 类中实现了这 2 个不同的屏幕。

如果我的用户使用的是常规宽度的 iPad,然后使用我的应用程序进入拆分视图并导致应用程序更改为紧凑宽度,我需要更改向用户显示的 ViewController。最好的策略是什么?

注意:我没有使用故事板。

谢谢!

4

2 回答 2

0

感谢您的回复。我在想也许我应该使用状态恢复,然后根据我的特征集合恢复不同的视图控制器。

相反,我想我将只创建一个视图控制器容器,然后在 willLayoutSubviews 中,我将根据当前视图的特征集合决定要显示哪些视图控制器。

谢谢!

于 2015-12-04T22:54:40.027 回答
0

我有两种方法可以解决这个问题。一,你可以看看UISplitViewControllerDelegate,特别是关于折叠和展开界面的部分。

另一种解决方案是覆盖您的尺寸集合,以便在 iPhone 和 iPad 上显示相同,因为没有任何东西折叠和展开,两个视图始终“存在”。您可以将拆分视图控制器设置为preferredDisplayMode在 iPhone 上看起来不错的 Overlay。您需要做的就是添加

UITraitCollection* horizTrait = [UITraitCollection
                                 traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
UITraitCollection* vertTrait = [UITraitCollection
                                traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular];
UITraitCollection* childTraits = [UITraitCollection
                                  traitCollectionWithTraitsFromCollections:@[horizTrait, vertTrait]];

[self setOverrideTraitCollection:childTraits forChildViewController:self.childViewControllers[0]];

到你的父类UISplitViewController(如果没有父类,你必须创建一个。这可以只是一个简单的导航控制器)

编辑:我应该提到,上面的代码只是将设备的特征设置为所有设备的常规-常规。

于 2015-12-04T21:06:13.390 回答