iOS 纯代码屏幕适配

首先说下让自己的程序支持iPhone6和6+,第一种使用官方提供的launch screen.xib,这个直接看官方文档即可,这里不再多述;第二种方法是和之前iPhone5的类似,比较简单,为iPhone6和6+添加两张特殊的png

iPhone6:命名:[email protected]   分辨率:750*1334

6+ 命名:[email protected]  分辨率:1242*2208

注意:

如果要在app的介绍页面里有“为iPhone6,6 plus优化”的字样就必须使用第一种方法,使用第二种方法的话还是会显示“为iPhone5优化”

 

下面说一下纯代码适配

首先iPhone5的界面一定要完全适配,这样才能完美适配6和6Plus。
首先,我么我们要观察一下5,6和6Plus的尺寸比例关系

iOS 纯代码屏幕适配

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

 

在AppDelegate.h中

1

2

@property float autoSizeScaleX;

@property float autoSizeScaleY;

在AppDelegate.m中

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#define ScreenHeight [[UIScreen mainScreen] bounds].size.height

#define ScreenWidth [[UIScreen mainScreen] bounds].size.width

 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];

     

    if(ScreenHeight > 480){

        myDelegate.autoSizeScaleX = ScreenWidth/320;

        myDelegate.autoSizeScaleY = ScreenHeight/568;

    }else{

        myDelegate.autoSizeScaleX = 1.0;

        myDelegate.autoSizeScaleY = 1.0;

    }

}

 

因为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

2

3

4

5

6

7

8

9

10

11

UIImageView *imageview = [[UIImageView alloc] initWithFrame:CGRectMake1(100, 100, 50, 50)];

 

CG_INLINE CGRect

CGRectMake1(CGFloat x, CGFloat y, CGFloat width, CGFloat height)

{

    AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];

    CGRect rect;

    rect.origin.x = x * myDelegate.autoSizeScaleX; rect.origin.y = y * myDelegate.autoSizeScaleY;

    rect.size.width = width * myDelegate.autoSizeScaleX; rect.size.height = height * myDelegate.autoSizeScaleY;

    return rect;

}

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

 

如果整个项目做完后才开始做适配的话这个方法的优势就体现出来了,面对几十个工程文件,只需自定义并且替换你的CGRectMake方法,再加上storyBoradAutoLay这个方法就瞬间完成大部分甚至全部的适配,如果遇到tableView的或者其他的手动调整一下即可。

转载自:http://blog.csdn.net/xiaobo16/article/details/42105915

更多相关文章
  • 利用主窗口类实现,QT版:记事本. #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QCloseEvent> #include <QTextEdit> #incl ...
  • 你试过指纹支付吗?昨天,支付宝钱包和三星旗舰机型GALAXY S5率先推出了指纹支付服务,7月起,消费者不必输入繁琐的数字密码,只要在指纹传感器上轻轻一刮,就能成功支付.这是国内首次在智能手机上开展的指纹支付尝试,也意味着国内移动支付产业从数字密码时代跨入了生物识别时代. 对这个新玩意儿,扬州市民既 ...
  • 微软良心之作——Visual Studio Code 开源免费跨平台代码编辑器 在 Build 2015 大会上,微软除了发布了 Microsoft Edge 浏览器和新的 Windows 10 预览版外,最大的惊喜莫过于宣布推出免费跨平台的 Visual Studio Code 编辑器了! Vis ...
  •     我们在开发数据库应用的时候,很多时候会使用SQL Server作为后台数据库,但是SQL Server数据库的发布却不想本地数据库那样简单,只需要将建好的数据库文件到目标机中即可.    目前我们有三种方法可以将SQL Server 数据库导入到目标机中的SQL Server数据库系统中.  ...
  • 一个人可以贫贱,但是不能没有梦想:失败.痛苦和坎坷会让我们更加地珍惜未来的生活,会让我们更努力,更渴望成功! 2012年匆匆而过. 2013年即将进入奔3的行列,回首过往,岁月不曾蹉跎而过,生活照样平淡无奇.同行于路上的人越来越少,各自沿着自己的轨迹渐渐地走散了,平庸的人都一样,幸福的人各有各的辉煌 ...
  • 易网科技讯 9月18日消息,有知情人士指出,Twitter最早完成IPO的时间可能在今年11月,并赶在感恩节之前,以尽量避免节后出现的市场忧郁现象.如果Twitter选择在11月或12月完成IPO,公司则不得不在为时21天的路演期间内公布财务细节.IPO通常会在路演完成后的数日内启动.不过考虑到届时 ...
一周排行
  • 申明:本文转载来自原创:http://raychase.iteye.com/blog/1450079 这篇文字是我好久以来的想法,有一些感悟,有一些激烈的言辞,我很自豪我就是一名程序员,我希望给程序员或者前程序员们带 ...
  • [文章导读] 李园寝室的兄弟们在老大的带领下终于在寝室里率先连上了互联网,这让全班的兄弟姐妹们羡慕不已,老大也名声大噪,一时间成为班上的"风云人物", 搭乘网络快车 由于学校半年前开通了寝室宽带上 ...
  • 在node01上导出数据库 [[email protected] ~]# mysqldump -u dba -p -B phpwind > /opt/phpwind.sql 在node02上导入数据库 [[email protected] ...
  • 上一讲我们学会了通过原型来继承父类实例的属性,即用prototype指向一个父类实例. 这样做我们需要人为地实例化一个父类对象,而且如果父类中有一些特别的属性和行为子类有可能是用不到. 由此我们自然会想,有没有一种办 ...
  • 关于资源文件 现实生活中某些exe或者dll文件需要依赖其它文件得以正常运行,此时如果把该文件直接拷贝到客户端,然后程序内部用相对路径读取不一定是很好的方案(因为一旦客户删除了这些资源,程序可能出现不可预见的效果). ...
  • web前端的网站气质是一种感觉,一种不需言语就可以把用户吸引住的感觉,说的总是那么的好,至于怎么实现,还请祥看本文,希望可以帮助到大家 web前端的网站气质是一种感觉,一种不需言语就可以把用户吸引住的感觉,那么,你认 ...
  •      文件操作是网站编程的重要内容之一,asp关于文件操作讨论的已经很多了,让我们来看看jsp(SUN企业级应用的首选)中是如何实现的. 这里用到了两个文件,一个jsp(SUN企业级应用的首选)文件一个javab ...
  • (1) 使用了归并排序的思路(最快) 但是时间复杂度比归并排序要小,每行代码都相当于完成了一次归并 #include <stdio.h>  unsigned RevBit(unsigned x)  {  ...
  • 近日,趋势科技发布了2013年第一季度<信息安全总评季报>,季报总结了第一季度发生的韩国大规模APT攻击.零日漏洞攻击等事件,并指出对特定机构实施精准攻击是本季度黑客攻击行为模式与2012年最大不同之处. ...
  •          由本人之前有做过类似多客户端视频语音回话项目,视频语音应用模式是呼叫--应答模式,也很多网友问我类似视频语音的功能如何实现!现在本人特此写这个博客与大家分享这其中的项目经验!当然也可以进入群与我交流 ...