StoryBoard和代码结合 按比例快速兼容iPhone6/6 Plus简单教程

文章中的方法有很大的局限性,请谨慎使用!

现在由于苹果公司出了6和6Plus,让写苹果程序的哥们为了做兼容很头疼。用StoryBoard固然方便,但是后期做兼容要花费太多的时间和精力。
使用AutoLayout虽然会在不同尺寸的屏幕下自动布局,但是很多东西还是要自己手动修改,而且使用AutoLayout的话有一个弊病,就是无法通过代码来修改StoryBoard上控件的尺寸和位置。
使用纯代码搭建界面又会觉得不够直观,要花时间调整布局,虽然方便后期做调整兼容性,但是影响开发效率。
当然个人觉得还是代码和StoryBoard结合的方式比较方便。
先说下使用本方法的要求,首先iPhone5的界面一定要完全兼容,这样才能完美兼容6和6Plus。
首先,我么我们要观察一下5,6和6Plus的尺寸比例关系。发现了他们的关系后待会做兼容就明白了。

很明显能看出这三种屏幕的尺寸宽高比是差不多的,因此可以在5的基础上,按比例放大来兼容6和6Plus的屏幕。
在AppDelegate.h中

1 @property float autoSizeScaleX;
2 @property float autoSizeScaleY;

在AppDelegate.m中

 1 #define ScreenHeight [[UIScreen mainScreen] bounds].size.height//获取屏幕高度,兼容性测试
 2 #define ScreenWidth [[UIScreen mainScreen] bounds].size.width//获取屏幕宽度,兼容性测试
 3
 4 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 5     AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];
 6
 7     if(ScreenHeight > 480){
 8         myDelegate.autoSizeScaleX = ScreenWidth/320;
 9         myDelegate.autoSizeScaleY = ScreenHeight/568;
10     }else{
11         myDelegate.autoSizeScaleX = 1.0;
12         myDelegate.autoSizeScaleY = 1.0;
13     }
14 }

因为iPhone4s屏幕的高度是480,因此当屏幕尺寸大于iPhone4时,autoSizeScaleX和autoSizeScaleY即为当前屏幕和iPhone5尺寸的宽高比。比如,
如果是5,autoSizeScaleX=1,autoSizeScaleY=1;
如果是6,autoSizeScaleX=1.171875,autoSizeScaleY=1.17429577;
如果是6Plus,autoSizeScaleX=1.29375,autoSizeScaleY=1.2957;
现在我们获取了比例关系后,先来看一下如何解决代码设置界面时的兼容。
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)这个方法使我们常用的设置尺寸的方法,现在我设置了一个类似于这样的方法。
在.m文件中

 1 UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake1(100, 100, 50, 50)];
 2
 3 CG_INLINE CGRect//注意:这里的代码要放在.m文件最下面的位置
 4 CGRectMake1(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
 5 {
 6     AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];
 7     CGRect rect;
 8     rect.origin.x = x * myDelegate.autoSizeScaleX; rect.origin.y = y * myDelegate.autoSizeScaleY;
 9     rect.size.width = width * myDelegate.autoSizeScaleX; rect.size.height = height * myDelegate.autoSizeScaleY;
10     return rect;
11 }

这样,这个btn按钮在5,6和6Plus的位置和尺寸比例都是一样的。

代码兼容完之后,来看一下StoryBoard的兼容,当然,在平时的项目中我们不可能就一两个视图,而且每个视图里面可定还套有很多其他视图,如果把所有视图的尺寸用手动输入CGRectMake的方法来改兼容的话工作量非常大,而且容易出错。经过多次试验,我想出一种能快速兼容大多数界面的方法
在AppDelegate.m中

 1 //storyBoard view自动适配
 2 + (void)storyBoradAutoLay:(UIView *)allView
 3 {
 4     for (UIView *temp in allView.subviews) {
 5         temp.frame = CGRectMake1(temp.frame.origin.x, temp.frame.origin.y, temp.frame.size.width, temp.frame.size.height);
 6         for (UIView *temp1 in temp.subviews) {
 7             temp1.frame = CGRectMake1(temp1.frame.origin.x, temp1.frame.origin.y, temp1.frame.size.width, temp1.frame.size.height);
 8         }
 9     }
10 }
11
12 //修改CGRectMake
13 CG_INLINE CGRect
14 CGRectMake1(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
15 {
16     AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];
17     CGRect rect;
18     rect.origin.x = x * myDelegate.autoSizeScaleX; rect.origin.y = y * myDelegate.autoSizeScaleY;
19     rect.size.width = width * myDelegate.autoSizeScaleX; rect.size.height = height * myDelegate.autoSizeScaleY;
20     return rect;
21 }

storyBoradAutoLay是把当前view进行两层遍历,把里面的UIView类型的控件的尺寸取出来,乘以对应的比例再赋值给它的尺寸,这样StoryBoard里的兼容就完成了。如果你的界面里嵌套的比较多的话可以多加几层遍历。

在继承了UIViewController的.m文件中

1 #import "AppDelegate.h"
2 - (void)viewDidLoad{
3     [super viewDidLoad];
4     [AppDelegate storyBoradAutoLay:self.view];
5 }

在所有的继承了UIViewController的文件中,都加上storyBoradAutoLay这句代码,就能把当前的view进行兼容。

现在我们来看一下使用了该方法兼容的前后对比效果吧。

iPhone6兼容前

iPhone6兼容后

iPhone6Plus兼容前

iPhone6Plus兼容后

如果整个项目做完后才开始做兼容的话这个方法的优势就体现出来了,面对几十个工程文件,只需自定义并且替换你的CGRectMake方法,再加上storyBoradAutoLay这个方法就瞬间完成大部分甚至全部的兼容。
其实还是比较建议用代码和StoryBoard结合的方式来写代码,无论是从做兼容还是效率来说都是比较好的。
如果遇到tableView的或者其他的兼容改动,手动调整一下即可。

时间: 2024-08-05 18:20:23

StoryBoard和代码结合 按比例快速兼容iPhone6/6 Plus简单教程的相关文章

StoryBoard和代码结合 按比例快速兼容iPhone6/6 Plus教程

现在由于苹果公司出了6和6Plus,让写苹果程序的哥们为了做兼容很头疼.用StoryBoard固然方便,但是后期做兼容要花费太多的时间和精力.使用AutoLayout虽然会在不同尺寸的屏幕下自动布局,但是很多东西还是要自己手动修改,而且使用AutoLayout的话有一个弊病,就是无法通过代码来修改StoryBoard上控件的尺寸和位置.使用纯代码搭建界面又会觉得不够直观,要花时间调整布局,虽然方便后期做调整兼容性,但是影响开发效率.当然个人觉得还是代码和StoryBoard结合的方式比较方便.先

StoryBoard不使用AutoLayout情况下 按比例快速兼容适配iPhone6/6 Plus教程

声明:本文章是为了后期快速兼容6和6Plus的按比例放大方法,对于部分读者来说可能觉得该方法不妥.但是对于复杂的界面还有急于交付项目的人来说还是有一定帮助的. 现在由于苹果公司出了6和6Plus,让写苹果程序的哥们为了做兼容很头疼.用StoryBoard固然方便,但是后期做兼容要花费太多的时间和精力.使用AutoLayout虽然会在不同尺寸的屏幕下自动布局,但是很多东西还是要自己手动修改,而且使用AutoLayout的话有一个弊病,就是无法通过代码来修改StoryBoard上控件的尺寸和位置.使

不使用AutoLayout快速兼容适配iPhone6/6 Plus

转载:http://blog.it985.com/5121.html 声明:本文章是为了后期快速兼容6和6Plus的按比例放大方法,对于部分读者来说可能觉得该方法不妥.但是对于复杂的界面还有急于交付项目的人来说还是有一定帮助的. 现在由于苹果公司出了6和6Plus,让写苹果程序的哥们为了做兼容很头疼.用StoryBoard固然方便,但是后期做兼容要花费太多的时间和精力.使用AutoLayout虽然会在不同尺寸的屏幕下自动布局,但是很多东西还是要自己手动修改,而且使用AutoLayout的话有一个

APP的页面有三种基本实现方式:storyboard,xib,代码实现 与自动布局

APP页面的三种基本实现方式:storyboard,xib,代码实现. 当然在不采用页面自动布局的情况下,代码实现可以和storyboard,xib混合使用,咱们只说只采用基本实现方式,不说混合实现页面,你们可以自己在心里混合下吧. 采用storyboard实现的APP页面安装包最大,你想采用他强大功能(页面组织逻辑,可见既可得等),那么你的APP包的大小只有忍痛长瘤子了,采用他你对安装包的大小别太奢望了.不过很多老码农写APP习惯,不喜欢这类现代化的工具,还在用代码实现页面,或用XIB实现页面

iphone6来了,我该做点什么(兼容iphone6的方法)

北京时间2014年9月10日凌晨1点,苹果公司正式发布其新一代产品 iPhone6,相信做webapp开发的同学对它是充满了好奇和等待,也担心它带来各种坑爹,高清的分辨率,升级的retina显示屏,我们该如何做好适配呢? 相比iPhone5,iPhone6拥有更高分辨率的retina HD display,而iPhone6 plus的像素密度达到了401ppi,相比原来的326ppi,提升了25%,显示画面细节更丰富. iPhone6 Plus设备高为736pt,宽为414pt,缩放比例为@3X

干货 | 快速实现数据导入及简单DCS的实现

干货 | 快速实现数据导入及简单DCS的实现 原创:?赵琦?京东云开发者社区??4月18日 对于多数用户而言,在利用云计算的大数据服务时首先要面临的一个问题就是如何将已有存量数据快捷的导入到大数据仓库中.本文将演示如何基于京东云数据计算服务平台,简单.快速地将数据导入数据计算服务. 我们通常说的大数据平台主要包括三部分:数据相关的产品和技术.数据资产.数据管理.京东云数据计算服务(Data Computing Service,简称:DCS)是一个全托管.低使用成本的云上数据仓库服务.通过数据工厂

UIColor设置RGB颜色16颜色进制的做法-使用storyboard和代码实现

如何使用代码和storyboard设置 颜色为16进制的? 我们在做真是的项目时常常是美工给我做好 效果图,标尺图我们再来 写UI的,当然这些标尺图中也包括 设置 颜色,一般美工给你的 颜色是 一个  RGB (124,123,124)类似的额 RGB 的颜色或者  FFFFFF  16进制的颜色,我们需要按照美工的要求去设置 这个颜色; 当然 最好的方法是使用storyboard来设置,最简答,最强大,省事! 如何设置? 看图: 如图,给一个label,点击红色框之内的,可以设置任意的 颜色

iOS:删除storyBoard,纯代码实现UITabBarController的视图切换功能

storyboard是一个很强大的编写代码的辅助工具,可以帮助布局多个视图之间的联系,既直观又能减少代码量:但是,作为一个程序员,在不使用storyboard的情况下,纯代码编写是必须的技能. 下面就用纯代码实现纯代码实现UITabBarController的视图切换功能,咱就实现三个视图之间的转换吧,代码不多,容易看的明白. 步骤: 1.删除storyboard故事板和UIViewController 2.创建三个控制器类,均继承自UIViewController,分别为FirstViewCo

用C#代码编写的SN快速输入工具

一般软件都要输入序列号(SN),而大家平时用的最多的恐怕是盗版软件,通常盗版软件的序列号(SN)都保存成:XXXXX-XXXXX-XXXX-XXXX的形式. 而软件输入序列号的地方通常都是几个文本框(TextBox)组成.一个个的将XXXXX复制到文本框将非常麻烦.于是SN快速输入工具便由此产生了. 当然这些都和我的编写这个程序的原因无关.我编写这个程序的原因纯粹是因为有个网友和他舅舅打赌说要编写个程序,而他舅舅就是要他编写这个程序,但可惜我的这位网友才是个编程初学者(比我更菜的菜鸟),当然完成