ios – 故事板大小类:如何针对不同的设备/大小类实现不同的Segues,ViewControllers,UserFlow?

现有的iOS 7应用程序支持iPhone和iPad.目前我正在使用两种不同的故事板进行iPhone和iPad布局,效果很好.现在我尝试使用自适应大小类将其转换为One-Storyboard-Layout.

我的问题是,我的iPhone和iPad布局完全不同.它们不仅为控件使用不同的大小和位置,而且还使用一些完全不同的视图控制器.

两个故事板都使用MMDrawerController作为初始VC.但从那时起控制流程就不同了.虽然iPad Storyboard使用UISplitViewController作为所有其他ViewControllers的基础,但iPhone使用的是UITabBarViewController.

这只是一个区别,但还有其他一些.如何在一个故事板中处理这些差异?为了实现这个目标,我将根据当前的Size Class来定义不同的segue.但据我所知,这是不可能的.

一些新的iOS 8自适应Segues的行为可能会有所不同,具体取决于Size Class,但据我所知,不可能为不同的Size Classes指定不同的segue.此外,根据Size Class,无法定义不同的初始ViewControllers.

所以问题是:是否可以在一个故事板中指定两个不同的布局(包括不同的Segues,ViewControllers等)?

切换到单个Storyboard的原因是支持iOS 9中的新分屏和幻灯片功能.在启动时根据屏幕大小/大小类加载不同的故事板很容易.但是,当动态更改大小类时,无法在运行时切换到另一个Storyboard.是吗?

解决方法

我刚刚经历了类似的痛苦,并发现处理更大差异的唯一真正方法是在故事板中正常创建单独的控制器和segue,但是在代码中执行它们而不是依赖于在storyboard中创建的segue激活.

在我的情况下,我在iPhone和iPad上使用侧面菜单,但在iPad上使用拆分视图控制器作为主显示器而不是iPhone上的UINavigationController.另外一个复杂的问题是,在iOS8上,UISplitViewController在iPhone上受支持,但在iOS7上则不受支持,因为它被视为UINavigationController.

据我所知,你不能使用size类自动触发正确类型的segue.但是,只要您有一个进行选择的机制,您就可以在代码中执行此操作.因此,您仍然可以为每个大小的类创建segue,或者更好地为给定的设备类型创建显示模式,并从代码中调用正确的.

你最大的问题将是iOS9分屏,它似乎可以动态地将尺寸级别从iPad regularW / regularH改为iPad compactW / regularH,然后再滑动.您可以选择拆分视图,只需切换到导航控制器堆栈即可.我可以看到没有办法切换到标签栏,除非你弹回根,让app委托切换根屏幕并导航回到同一个地方.在这种情况下,很大程度上取决于您想要看到的内容.

最后,我在故事板中的一般经验法则是:

0)在App委托中,计算设备类型并将根屏幕设置为正确的故事板控制器入口点:例如在ipad上拆分视图,在iPhone上的选项卡视图.将一些方法/属性添加到app委托以便任何控制器访问以找出当前运行模式是很方便的.当你需要决定开火时,这将使生活更轻松.

1)根据需要创建单独的控制器,并始终使用任意/任何大小的类设计视图来创建大部分设计.我开始使用不同的设计视图,但发现管理起来太棘手了.特别是因为一些控制器可能出现在弹出窗口上,其中iPad上的尺寸等级(紧凑宽度)与主屏幕上的尺寸等级(常规宽度)不同.

2)根据需要对各个约束,字体等使用大小等级调整.

3)对于可能出现在弹出窗口中的任何视图控制器,在它之前加上带有故事板ID的UINavigationController,该故事板可以用作任何弹出框的根.

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

5)对于在分割视图控制器中用作详细视图的UIViewControllers,但是当在弹出窗口或iOS7上的iPhone上使用时也可能需要将其推入,从其各自的主细节控制器创建推送segue.如果您通过弹出窗口在拆分视图中设置的每个当前内容,或者在iPhone上没有拆分视图的iOS7上,您只需要这个.

6)在控制器之间创建segue,包括iPad / iPhone特定的segues.如果只有一个可能的segue,您可以使用storyboard激活.否则只需在控制器本身之间绘制segue.

7)对于按钮或单元格触发segues的任何控制器,您可以添加目标操作而不是segue触发器.在这些操作中,您将手动调用相应的segue.

8)在每个视图控制器中,目标控制器类型取决于显示模式的类型,编写代码,使用您的app委托运行模式属性来决定使用哪个segue,然后使用segue的标识符调用peformSegueWithIdentifier.

不是这个特别漂亮,但它似乎是一个必要的邪恶,特别是如果你使用拆分视图控制器和弹出窗口.好处是你至少可以在一个地方看到一切.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple 最新软件的错误和性能问题。
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只有5%的概率会遇到选择运营商界面且部分必须连接到iTunes才可以激活
一般在接外包的时候, 通常第三方需要安装你的app进行测试(这时候你的app肯定是还没传到app store之前)。
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应用变灰了。那么接下来我们看一下Flutter是如何实现的。Flutter中实现整个App变为灰色在Flutter中实现整个App变为灰色是非常简单的,只需要在最外层的控件上包裹ColorFiltered,用法如下:ColorFiltered(颜色过滤器)看名字就知道是增加颜色滤镜效果的,ColorFiltered( colorFilter:ColorFilter.mode(Colors.grey, BlendMode.
flutter升级/版本切换
(1)在C++11标准时,open函数的文件路径可以传char指针也可以传string指针,而在C++98标准,open函数的文件路径只能传char指针;(2)open函数的第二个参数是打开文件的模式,从函数定义可以看出,如果调用open函数时省略mode模式参数,则默认按照可读可写(ios_base:in | ios_base::out)的方式打开;(3)打开文件时的mode的模式是从内存的角度来定义的,比如:in表示可读,就是从文件读数据往内存读写;out表示可写,就是把内存数据写到文件中;
文章目录方法一:分别将图片和文字置灰UIImage转成灰度图UIColor转成灰度颜色方法二:给App整体添加灰色滤镜参考App页面置灰,本质是将彩色图像转换为灰度图像,本文提供两种方法实现,一种是App整体置灰,一种是单个页面置灰,可结合具体的业务场景使用。方法一:分别将图片和文字置灰一般情况下,App页面的颜色深度是24bit,也就是RGB各8bit;如果算上Alpha通道的话就是32bit,RGBA(或者ARGB)各8bit。灰度图像的颜色深度是8bit,这8bit表示的颜色不是彩色,而是256
领导让调研下黑(灰)白化实现方案,自己调研了两天,根据网上资料,做下记录只是学习过程中的记录,还是写作者牛逼
让学前端不再害怕英语单词(二),通过本文,可以对css,js和es6的单词进行了在逻辑上和联想上的记忆,让初学者更快的上手前端代码
用Python送你一颗跳动的爱心
在uni-app项目中实现人脸识别,既使用uni-app中的live-pusher开启摄像头,创建直播推流。通过快照截取和压缩图片,以base64格式发往后端。
商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。CSDN前端领域优质创作者,资深前端开发工程师,专注前端开发,在CSDN总结工作中遇到的问题或者问题解决方法以及对新技术的分享,欢迎咨询交流,共同学习。),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;2.判断支付方式,如果是1,则是微信支付方式。1.判断是否在微信内支付,需要在微信外支付。
Mac命令行修改ipa并重新签名打包
首先在 iOS 设备中打开开发者模式。位于:设置 - 隐私&安全 - 开发者模式(需重启)
一 现象导入MBProgressHUD显示信息时,出现如下异常现象Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_MBProgressHUD", referenced from: objc-class-ref in ViewController.old: symbol(s) not found for architecture x86_64clang: error: linker command failed wit
Profiles >> 加号添加 >> Distribution >> "App Store" >> 选择 2.1 创建的App ID >> 选择绑定 2.3 的发布证书(.cer)>> 输入描述文件名称 >> Generate 生成描述文件 >> Download。Certificates >> 加号添加 >> "App Store and Ad Hoc" >> “Choose File...” >> 选择上一步生成的证书请求文件 >> Continue >> Download。
今天有需求,要实现的功能大致如下:在安卓和ios端实现分享功能可以分享链接,图片,文字,视频,文件,等欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~声明:本博文章若非特殊注明皆为原创原文链接。