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通常会在路演完成后的数日内启动.不过考虑到届时 ...
一周排行
  • 易网科技讯   4月10日消息,据TechCrunch报道,当日上午Facebook宣布以10亿美元收购Instagram,此消息非常令人吃惊.但也很能说明大到科技世界.小到网络新创生态系统的状态.毫无疑问,未来一段 ...
  • Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xamarin去实现它,以及如何使用适配器和自定义适配器(本文中的适配器的主要 ...
  • 现象:     线上一个应用在使用css扫描时经常出现cpu被吃掉的情况 ,一会吃掉一个核,一会吃掉一个核 .分析肯定是某种条件下触发了死循环或大量耗时cpu操作.于是用jstack拿到线程栈:直接定位到270行:第 ...
  • 作者:NoseayRoc 粉丿丶兜兜 ​ 下午看见大牛ARP隐雾技术小组在群发,.所以手痒,打算被ARP的时候去欺骗一下万网的蝈蝈,电话过去,想说域名被人劫持了,喊他重置下密码,谁知道问这问那的,最后却告诉我页面恢复 ...
  • 现在大多数网站都采用了验证码来防止暴力破解或恶意提交.但验证码真的就很安全吗?真的就不能被机器识别??我先讲讲我是怎么实现站外提交留言到一个网站的程序.这个网站的留言版大致如下:我一看这种简单的4位数字验证码,马上就 ...
  •   有一台xp客户端开机报如下错误,如下错误信息.点确定也无法消失."0x1006706a"指令引用的"0x13ed1dbc"内存.该内存不能为"written&qu ...
  • 时间 9 8  guolin的专栏原文  http://blog.csdn.net/guolin_blog/article/details/17612763 转载请注明出处: http ...
  • 冒泡排序原版 分别使用usort和冒泡排序对数组按name的字符串长度排序 $arr = array( array('id' => 0, 'name' => '123833'), array('id' = ...
  • Rails4.0 -- 编码错误(二) 从数据库中取得数据显示时报 incompatible character encodings: GBK and ASCII-8BIT或 incompatible charact ...
  • 天谕分部件时装染色错误的解决方法 此次更新后上架的商城[分部件时装]的染色存在问题,[足].[手].[腿]的染色信息信息可能刷新成[身]的颜色.如遇此情况,玩家可重新装备该时装,染色将会恢复. 该问题目前正在修复中, ...