我有一个应用程序,我想启用拆分视图。 iPhone与iPad的用户界面略有不同(紧凑型与常规宽度)。
在紧凑宽度模式下,我有一个UITableView,其中包含用户可以选择的项目列表,当他们这样做时,我将新的View Controller推送到导航堆栈。但是,在常规宽度中,UITableView列表显示在左侧,然后我在右侧有一些其他视图(未在UISplitViewController中实现)。所以我在2个不同的ViewController类中实现了这两个不同的屏幕。
如果我的用户使用的是常规宽度的iPad然后使用我的应用程序进入拆分视图并导致应用程序更改为紧凑宽度,我需要更改我向用户显示的ViewController。对此最好的策略是什么?
注意:我没有使用故事板。
谢谢!
答案 0 :(得分:0)
我有两种方法可以找到解决方案。一,您可以查看UISplitViewControllerDelegate,特别是有关折叠和扩展界面的部分。
另一个解决方案是覆盖你的尺寸集合,以便iPhone和iPad上的显示相同,因为没有任何折叠和扩展,两个视图总是“存在”。您可以将拆分视图控制器的preferredDisplayMode
设置为Overlay,这在iPhone上看起来很不错。您需要做的就是添加
UITraitCollection* horizTrait = [UITraitCollection
traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
UITraitCollection* vertTrait = [UITraitCollection
traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular];
UITraitCollection* childTraits = [UITraitCollection
traitCollectionWithTraitsFromCollections:@[horizTrait, vertTrait]];
[self setOverrideTraitCollection:childTraits forChildViewController:self.childViewControllers[0]];
到UISplitViewController
的父类(如果没有父类,则必须创建一个。这可以只是一个简单的导航控制器)
编辑:我应该提一下,上面的代码只是将设备的特征设置为所有设备的常规规则。
答案 1 :(得分:0)
感谢您的回复。我想也许我应该使用状态恢复,但是根据我的特征集合恢复不同的视图控制器。
相反,我想我只是创建一个视图控制器容器,然后在willLayoutSubviews中,我将根据当前视图的特征集合决定显示哪些视图控制器。
谢谢!