我尝试使用iOS 8+中的Master / Detail UISplitViewController实现一组自适应行为,这些行为在我看来很直观,但不是(据我能够发现)"典型" Apple的例子或在我见过的各种iOS 8+ UISplitViewController教程中实现的。所以我转到这里寻求建议,认为我不能成为第一个想要这些行为的人,这些行为是:
1)在纵向上的所有iPhone(加号或不加号)上,在主表格视图中选择一个单元格"按下"屏幕上的详细信息视图,并将主表格视图关闭屏幕 - 即通常的导航控制器行为。
2)在横向方向上的所有iPhone(加号或不加号)以及所有方向的iPad上,主视图在单元格选择后保持可见,直到/除非用户a)点击详细信息视图内部或b)点击a"全屏"详细信息视图顶部栏中的按钮,此时主视图将动画显示在视图之外。
3)在横向方向上的所有iPhone(加号或不加号)以及所有方向的iPad上,详细信息视图会动态调整大小,以便a)显示主视图时,详细信息视图的任何部分都不会覆盖/遮挡通过主视图,和b)当主视图未显示时,详细信息视图占据屏幕的整个宽度。
4)在所有设备和所有方向上,当未显示主视图时,点击详细信息视图顶部栏中的按钮会使主视图在屏幕上显示动画 - 即,作为& #34;弹出"在纵向方向的所有iPhone上,以及作为细节视图挤压"窗格"在横向和所有方向的iPad上的所有iPhone(加或不)。
换句话说,在所有方向的所有设备上 - 除了在纵向的iPhone上,在这种情况下通常的导航控制器行为应该获得 - 主视图应该是细节视图挤压(不重叠/模糊)" pane"直到/除非用户点击详细信息视图内部或在"转到全屏"详细信息视图顶部栏中的按钮;此时主视图应在屏幕上显示动画,详细信息视图应占据屏幕的整个宽度。
任何建议/示例代码/链接将非常感谢! (我现在在Swift工作,但可以很快地将Objective-C代码改编为Swift。)
谢谢,
卡尔
更新1
通过将UISplitViewController的preferredDisplayMode属性设置为.AllVisible(Obj-C = UISplitViewControllerDisplayModeAllVisible),上面的要求2和3变得很容易在iPad 上实现。作为副作用,这种模式为我提供了所需的"全屏"详细信息视图顶部栏中的按钮。
然而,我仍然无法获得所需的行为 - 即保持主要(主要)和次要(细节)视图控制器始终在横向模式下可见 - 在任何iPhone上,但6+。我希望在我的自定义UISplitViewController中覆盖viewWillTransitionToSize:withTransitionCoordinator
来将其辅助视图控制器的大小类设置为UITraitCollection(horizontalSizeClass: .Regular)
就可以了,但没有这样的运气:iOS似乎忽略了这一点在iPhone上进行横向布局时覆盖尺寸等级。
我见过的一个例子(Ray Wenderlich" iOS 8 by Tutorials")表明了实现我想要的所有iPhone的方式(好吧,可能不包括iPhone) 4s,因为它的屏幕是如此"简短")是将UISplitViewController嵌入到父视图控制器的容器视图中,并覆盖该父视图控制器的viewWillTransitionToSize:withTransitionCoordinator
设置子UISplitViewController的size-class的方法。我愿意这样做,如果这是正确的或唯一的方式,但它似乎是一个我想尽可能避免的kludge。
更新2
我已经尝试过Ray Wenderlich的技术,将类似iPhone-6 +的UISplitViewController格局行为扩展到其他iPhone,并且可以确认它是否有效。我甚至会说,如果感觉比我想象的要少一点,尽管它仍然不是我认为的纯粹"纯粹的"解决方案(从某种意义上说,它不是一个我从严格的UI设计方法中得到的)。
如果有人知道更直接的方式来实现这种行为,我仍然想知道它。所以我会把这个留给其他想要这种行为的人,并且"未得到答复"为了寻求更好的解决方案。