关于iPhone设备不同显示尺寸适配的一些方法
关于iPhone设备不同显示尺寸适配的一些方法
------关于适配的理解------
1、什么是适配?
适配是对不同硬件和系统软件的适应,硬件包括屏幕显示,处理器,内存等等(目前主要是屏幕适配,iPhone 6s新增了3D Touch功能,其他硬件功能并没有实质性的改变),软件主要是不同iOS系统(有些在最新系统(通常会尽量向下兼容)不再支持的方法都需要做一些判断)。
2、为什么要适配?
适配是为了兼容不同的设备。
3、屏幕适配主要有哪些方式?
(1)等比例适配(所有视图按屏幕大小缩放,相对位置不变):a、纯代码;b、代码+storyboard(不使用自动布局);c、代码+storyboard(使用自动布局)。
(2)自由适配(主要使用自动布局):由于同一布局在不同大小的屏幕上显示效果不一样,如果仅仅是等比缩放,有时显示效果差强人意;在显示内容尺寸符合操作习惯(这个看自己咋想)的情况下,屏幕大小最大的区别是屏大显示内容多(如浏览新闻等,除了只有一些固定图片、控件等的简洁界面),a、约束内容的间距及相对大小;b、约束内容的宽高及相对位置;c、约束内容的间距、宽高。
------适配的一些方法------
情况一
(等比适配,代码+storyboard,不使用自动布局,建议用iPhone6的尺寸布局),通过获取屏幕尺寸,重定义CGRectMake,更新所有视图及其子视图的frame,完成等比适配。注意字体、图片,以及tableView、collectionView。
1、——————AppDelegate.h添加:
+ (void)ergodicView:(UIView *)view;
2、——————AppDelegate.m添加:
#define ScreenHeight [UIScreen mainScreen].bounds.size.height
#define ScreenWidth [UIScreen mainScreen].bounds.size.width
#define ScreenScaleX (ScreenWidth/375)//相对于苹果6屏幕
#define ScreenScaleY (ScreenHeight/667)
//按屏幕自动适配storyBoard所有视图
+ (void)ergodicView:(UIView *)view{
if (view.subviews.count != 0) {
for (UIView *temp in view.subviews) {
temp.frame = CGRectMake1(temp.frame.origin.x, temp.frame.origin.y, temp.frame.size.width, temp.frame.size.height);
[self ergodicView:temp];
}
}
}
//修改CGRectMake
CG_INLINE CGRect
CGRectMake1(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
CGRect rect;
rect.origin.x = x * ScreenScaleX;
rect.origin.y = y * ScreenScaleY;
rect.size.width = width * ScreenScaleX;
rect.size.height = height * ScreenScaleY;
return rect;
}
--------------------
情况二
使用autolayout布局后,可重新设置视图的frame。等viewDidLoad加载完后,再延迟改变视图的frame,不延迟会被storyboard重新设置。也可以在viewDidLayoutSubviews或viewDidAppear重新设置frame
关于iPhone设备不同显示尺寸适配的一些方法的更多相关文章
- iPhone设备及屏幕适配
// // Common.h // 微信 // // #ifndef Common_h #define Common_h // iPhone设备及屏幕适配 //4的设备 #define KDevice ...
- 判断iPhone设备是carplay和iPod的方法
Carplay 参考代码: int UdevIsCarplay(int nVid, int nPid)//int UsbModeSwitch(pUdevStatus pStatus) { ; if ( ...
- ios5和ios6横竖屏支持及ipad和iphone设备的判断
ios5和ios6横竖屏支持及ipad和iphone设备的判断 判断是ipad还是iphone设备.此定义在PayViewControllerDemo-Prefix.pch 定义如下: #define ...
- ios7 以后准确获取iphone设备的MAC(物理地址)
通过参考 钉钉 项目,知道是通过wifi拿到路由的MAC地址.那么可不可以拿到iphone 设备的MAC 地址呢? 经过一番搜索,发现所有文章都是针对 ios 7 以前 可以拿到. 而且方法也都是同一 ...
- iphone手机怎么录屏 两种方法任你挑选
iphone手机怎么录屏呢?苹果手机拥有独特的Airlay镜像投屏,AirPlay的工作原理是当iPhone或IPAD与支持AirPlay技术的硬件,比如Apple TV等设备处在同一个wife的情况 ...
- iPhone批量删除照片/视频最好用的方法
iPhone批量删除照片/视频最好用的方法 经过大量的搜索和不懈的尝试,今天终于找到了批量删除iPhone照片最好用的方法, 于是决定写一篇博客为更多的果粉们造福! 1. 通过USB将iPhone手机 ...
- iphone抓取移动网络报文的方法
iphone抓取移动网络报文的方法 对iPhone进行越狱,网上有很多教程,这里不做说明.越狱后会有cydia这个app,首先对用户身份进行设置,选用开发者身份.打开这个应用,搜索openssh,找到 ...
- usb设备运行不正常的解决方法(转)
add by zhj:上午鼠标还用的好好的,下午就不能用了,插上之后提示“跟这台计算机连接的一个usb设备运行不正常”,尼玛,什么情况?我今天没安装软件啊,换了个USB接口也不行,在另一台电脑上试还是 ...
- 用launchscreen.storyboard适配启动图方法(二)
背景 之前有写一篇实现方式比较简单的随笔用launchscreen.storyboard适配启动图方法,顺便在评论区提了一下用autolayout适配启动图的思路,现把思路和流程记录下来. 思路 整体 ...
随机推荐
- Linux 网络子系统
今天记录一下Linux网络子系统相关的东西. 因为感觉对这一块还是有一个很大的空白,这件事情太可怕了. 摘抄多份博客进行总结一下Linux网络子系统的相关东西. 一. Linux网络子系统体系结构 L ...
- 【转】Java读取matlab的.mat数据文件
参考:Java读取mat文件 下载链接:ujmp jmatio 下载完两个.jar文件之后,如何引用到java项目当中?项目名称->右键->Property->Java Build ...
- 【krpano】浏览点赞插件(源码+介绍+预览)
简介 最近几天研究了如何在krpano全景的基础上实现记录浏览量和点赞次数,写了一个插件,方便大家使用. 效果截图如下: 每当有用户打开该全景页面时,浏览量会自动加1: 用户可以主动点击点赞按钮,点击 ...
- WCF
--http://www.doc88.com/p-699300196010.html ---术语 WCF术语 消息(message) 消息是一个独立的数据单元,它可能由几个部分组成,包括消息正文和消息 ...
- 第一个JSP
还是大一暑假学的Java,知识掌握了第一阶段的Java基础知识, 后面想自己进阶第二阶段,学习JavaWeb,一直拖到现在直接从Java第二阶段写了~~~ 希望指正: 这次主要还是第一个Hello W ...
- Centos7设置IP为固定值
1.进入到系统的IP地址保存文件所在目录 [root@localhost ~]# cd /etc/sysconfig/network-scripts 2.修改保存IP信息的文件 [root@local ...
- Android 笔记 day1
- hdu 5073
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5073 思路:一开始忘了排序,wa了好几发...选择区间长度为N - K的连续的数, 然后其余的K个数都 ...
- Log4net用法
日记是我们在程序中经常用到的,故记于此 首先要下载Log4net.dll 官方网站:http://logging.apache.org/log4net/ vs里创建一个c#控制台程序,在App.con ...
- Oracle协议适配器错误解决办法
在Oracle中新建了一个数据库,今天把它删了之后再登录SQL*PLUS就登不上去了,出现ORA-12560:TNS:协议适配器错误. ORA-12560: TNS: 协议适配器错误的解决方法 造成O ...