gpt4 book ai didi

ios - Storyboard + 尺寸等级 : How to implement different Segues, ViewControllers,针对不同设备/尺寸等级的 UserFlow?

转载 作者:可可西里 更新时间:2023-11-01 03:32:12 26 4
gpt4 key购买 nike

现有的 iOS 7+ 应用程序支持 iPhone 和 iPad。目前我正在为 iPhone 和 iPad 布局使用两个不同的 Storyboard,效果很好。现在,我正在尝试使用自适应大小类将其转换为单 Storyboard布局。

我的问题是,我的 iPhone 和 iPad 布局完全不同。他们不仅为控件使用不同的大小和位置,而且还使用了一些完全不同的 View Controller 。

两个 Storyboard都使用 MMDrawerController作为初始VC。但是从那里开始,控制流程就不同了。 iPad Storyboard 使用 UISplitViewController 作为所有其他 ViewController 的基础,而 iPhone 使用 UITabBarViewController

这只是一个区别,但还有其他区别。这些差异应该如何在一个 Storyboard 中处理?为了实现这一点,我将不得不根据当前的 Size Class 指定不同的 segues。但据我所知这是不可能的。

一些新的 iOS 8 自适应 Segues 可以根据大小类表现不同,但据我所知,不可能为不同的大小类指定不同的 segues。此外,不可能根据 Size Class 定义不同的初始 ViewController。

那么问题来了:是否可以在一个 Storyboard 中指定两种不同的布局(包括不同的 Segues、ViewControllers 等)?

切换到单个 Storyboard的原因是为了支持 iOS 9 中新的分屏和侧拉功能。在启动时根据屏幕尺寸/尺寸类别加载不同的 Storyboard很容易。但是当大小类动态更改时,在运行时切换到另一个 Storyboard 是不可能的。是吗?

最佳答案

我刚刚经历过类似的痛苦,发现处理较大差异的唯一真正方法是像往常一样在 Storyboard 中创建单独的 Controller 和转场,但在代码中执行它们而不是依赖 Storyboard 中创建的转场激活.

在我的例子中,我在 iPhone 和 iPad 上都使用了侧边菜单,但在 iPad 上主显示器使用的是 Split View Controller ,而在 iPhone 上使用 UINavigationController。更复杂的是,在 iOS8 上,UISplitViewController 在 iPhone 上受支持,但在 iOS7 上不支持,在 iOS7 上它被视为 UINavigationController。

据我所知,您不能使用大小类来自动触发正确类型的转场。但是,只要您有做出选择的机制,就可以在代码中做到这一点。因此,您仍然可以为每个尺寸类别创建 segue,或者为给定的设备类型改进您的显示模式,并从代码中调用正确的模式。

您最大的问题是 iOS9 分屏,它似乎会在您滑动时动态地将尺寸类别从 iPad regularW/regularH 更改为 iPad compactW/regularH 并返回。你会接受像 Split View这样的东西,它会简单地切换成看起来像导航 Controller 堆栈。我看不出有什么办法可以快速切换到标签栏,除非你跳回根目录,让应用程序委托(delegate)切换根屏幕并将你导航回同一个地方。很大程度上取决于您希望在这种情况下看到什么。

最后,我在 Storyboard中的一般经验法则是:

0) 在 App delegate 中,确定设备类型并将根屏幕设置为正确的 Storyboard Controller 入口点:例如iPad 上的 Split View,iPhone 上的选项卡 View 。将一些方法/属性添加到应用程序委托(delegate)以供任何 Controller 访问以找出当前运行模式是很方便的。当您需要决定触发哪个 segue 时,这将使生活更轻松。

1) 根据需要创建单独的 Controller ,并始终使用 Any/Any size 类设计 View 来创建大部分设计。我开始使用不同的设计 View ,但发现管理起来太棘手了。特别是当某些 Controller 可能出现在弹出窗口中时,iPad 上的尺寸等级(紧凑宽度)与主屏幕上的尺寸等级(常规宽度)不同。

2) 根据需要对单个约束、字体等使用大小类调整。

3) 对于可能出现在弹出窗口中的任何 View Controller ,在其前面加上一个 UINavigationController 和一个 Storyboard ID,可以用作任何弹出窗口的根。

4) 对于 UISplitViewControllers,使用 showDetail 样式 segues 正常创建。

5) 对于在 Split View Controller 中用作详细 View 但在弹出窗口或 iOS7 上的 iPhone 上使用时可能还需要推送的 UIViewController,从它们各自的主细节 Controller 创建推送转场。仅当您通过弹出窗口或在 iOS7 上展示在 Split View中设计的内容时才需要此功能,而在 iPhone 上没有 Split View。

6) 在您的 Controller 之间创建转场,包括 iPad/iPhone 特定的转场。如果只有一种可能的转场,您可以使用 Storyboard激活。否则只需在 Controller 之间绘制 segues。

7) 对于按钮或单元触发 segues 的任何 Controller ,您添加目标操作而不是 segue 触发器。在这些操作中,您将手动调用适当的 segue。

8) 在目标 Controller 类型取决于显示模式类型的每个 View Controller 中,编写使用应用程序委托(delegate)运行模式属性的代码来决定使用哪个 segue,然后调用 peformSegueWithIdentifier 带有 segue 的标识符。

这些都不是特别漂亮,但它似乎是一个必要的邪恶,特别是如果你使用 Split View Controller 和弹出窗口。好处是您至少可以在一个地方看到所有内容。

关于ios - Storyboard + 尺寸等级 : How to implement different Segues, ViewControllers,针对不同设备/尺寸等级的 UserFlow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32092218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com