(0010) iOS 开发之UI布局兼容 4s/5/6/7 屏幕解决方案
iOS开发技术分享群 147787076
如上带标注的效果图,是1080*1920 也就是6p 的尺寸。如何根据6p的标注,在各种iPhone 尺寸上完美适配尼?
适用:UI 各屏幕/分辨率适配方案(只针对竖屏iPhone页面,并且不太多的不定因子)
640*960 4 0.66666
640*1136 5 0.56338
750*1334 7 0.56221
1080*1920 7+ 0.5625
1242*2208
不定因子:就是label 的text在6p 效果图上显示,但在5/4s可能显示三行,量取时的标注只是在6p中两行标注。而跑到5/4s上时,可能变成了三行,我叫这种为不定因子。
W6p H6p 为6p效果图的标注;Wtep Htep为对应到各个屏幕分辨率上的标注
w = W6p* SreenWidth/1080 W6p:Wtep = 1080:(SreenWidth*2) 即:Wtep = W6p*(SreenWidth*2)/1080
h = H6p*SreenHeight/1920 H6p:Htep = 1920:(SreenHeight*2) 即:Htep = H6p*(SreenHeight*2)/1920
1.居中对齐的,x坐标 用(SreenWidth-控件的宽)/2
2.居左的对齐的,x坐标 用 x = W6p* SreenWidth/1080
3.4s 尺寸上的高的标注使用5的比例就是也使用,640*1136,这样基本都按9:16的比例。算出对应对应到各个屏幕分辨率上的标注。那么4s 屏幕上的纵向标注实际上略微偏大。可以忽略不计。
有一种情况:就是label 的text在6p 效果图上显示,但在5/4s可能显示三行,量取时的标注只是在6p中两行标注。而跑到5/4s上时,可能变成了三行,我叫这种为不定因子。那么此时根据上面的计算是不对的,因为你算的是两行的比率。但到5/4s实际上是三行。从而造成(不定因子)部分视图“红杏出墙”。
因此,需要从新加上多出来额高度。
// 子视图中有不定因子,所以要重新计算不定因子多出来的高度
- (void)freshBaseViewFrame
{
// 效果图上标注的高
CGFloat sixPLabelHeight = GetAdaptiveViewRectHeight(105);
// 当前设备的高度
CGFloat currentLabHeight = _messageLab.bounds.size.height;
CGSize temSize = _baseView.size;
if (currentLabHeight>sixPLabelHeight) {
temSize.height = temSize.height+currentLabHeight-sixPLabelHeight;
}
_baseView.size = temSize;
}
#define kScreenWidth [[UIScreen mainScreen]bounds].size.width //屏宽
#define kScreenHeight [[UIScreen mainScreen]bounds].size.height //屏高
// 效果图一般是1080*1920(1242*2208)而实际6p屏幕坐标尺寸是414*736
// 这里要处理两个问题;分辨率>1920*1080和4s上高度太小,最高采取1920*1080,4s采取5的640*1136,使所有都符合16:9.
// 用来得到设备的自然分辨率
#define DeviceScreenScale [UIScreen mainScreen].scale
// 分辨率的宽 例如6p 1080
#define DeviceScreenResolutionX kScreenWidth*DeviceScreenScale >1080 ? 1080:kScreenWidth*DeviceScreenScale
// 分辨率的高 例如6p 1920
#define DeviceScreenResolutionY kScreenHeight*DeviceScreenScale >1920 ? 1920: (kScreenHeight*DeviceScreenScale<1136 ?1136:kScreenHeight*DeviceScreenScale)
// 得到对应到各个屏幕分辨率上的对应标注(relative annotations = RA)
#define RAMinX(Wx6p) (Wx6p*(DeviceScreenResolutionX))/(1080.0) //对应到设备上的居左的标注
#define RAMinY(Hy6p) (Hy6p*(DeviceScreenResolutionY))/(1920.0) //对应到设备上的居上的标注
#define RAWidth(W6p) (W6p*(DeviceScreenResolutionX))/(1080.0) //对应到设备上的控件宽的标注
#define RAHeight(H6p) (H6p*(DeviceScreenResolutionY))/(1920.0) //对应到设备上的控件高的标注
// 根据上面的标注计算,获得各个屏幕分辨率上对应的坐标单位 (4s 的高按5的处理)
#define temkScreenHeight kScreenHeight<568 ?568:kScreenHeight
// X 为6p效果图上的居左标注
// Y 为6p效果图上的居上标注
// W 为6p效果图上的宽的标注
// H 为6p效果图上的高的标注
#define GetAdaptiveViewRectMinX(X) (RAMinX(X)*kScreenWidth)/(DeviceScreenResolutionX)
#define GetAdaptiveViewRectMinY(Y) (RAMinY(Y)*(temkScreenHeight))/(DeviceScreenResolutionY)
#define GetAdaptiveViewRectWidth(W) (RAWidth(W)*kScreenWidth)/(DeviceScreenResolutionX)
#define GetAdaptiveViewRectHeight(H) (RAHeight(H)*(temkScreenHeight))/(DeviceScreenResolutionY)
根据6p效果图的标注,使用GetAdaptiveViewRect的宏,设置控件的坐标和大小即可。
中间弹框,实际运行在各设备上的效果,完美。
(0010) iOS 开发之UI布局兼容 4s/5/6/7 屏幕解决方案相关推荐
- IOS开发之UI基础LOL英雄展示-15
IOS开发之UI基础LOL英雄展示-15 // // ViewController.m // 15-英雄展示-单组数据 // // Created by 鲁军 on 2021/2/3. //#impo ...
- iOS开发之UI开发(UITableView)
UITableView 继承自UIScrollView,性能极佳 UITableView的两种样式 UITableViewStylePlain列表样式 UITableViewStyleGrouped ...
- (0107)iOS开发之UI实时调试InjectionIII的使用
AppStore : 下载:Injectionlll 下载地址 使用步骤: 1.设置InjectionIII 打开InjectionIII工具,选择Open Project,选择你的代码所在的路径,然 ...
- IOS开发之UI手势
2019独角兽企业重金招聘Python工程师标准>>> 点击手势和双击手势 #import "TapViewController.h" @interface Ta ...
- (0103)iOS开发之Xcode 10 Error:Multiple commands produce问题及解决方案
问题描述 从Github 上Down下来的demo,用Xcode(10.1)打开,Build一下报如下错误: Showing All Messages :-1: Multiple commands p ...
- iOS开发之AVKit框架使用
2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...
- iOS开发之ARC(自动引用计数)
iOS开发之ARC(自动引用计数) 英文原文:Automatic Reference Counting on iOS 参与翻译(4人): 纶巾客, showme, 李远超, 王宇龙 自动引用计数(AR ...
- (0045) iOS 开发之MBProgressHUD 源码学习
(0045) iOS 开发之MBProgressHUD 源码学习 第一部分:学习所得和分析线程 1. 学习到了kvo 的使用 和屏幕方向的旋转判断. 2. 如果调起这个 HUD 的方法不是在主线程调 ...
- (0016)iOS 开发之Mac上Navicat Premium 创建远程连接和本地连接
1.下载安装 (百度云盘里面有安装文件和注册机) 链接: https://pan.baidu.com/s/1kVG1k71 密码: mr5g 破解教程看这篇博客:http://blog.csdn.ne ...
最新文章
- [转]android之Apache Http——向服务器发送请求的同时发送参数
- 1003 Emergency (25 分)【Dijastra与DFS解法】
- Java中获取系统日期时间/系统时间
- 前端学习(1716):前端系列javascript之页面配置下
- ​全网首发,TensorFlow 2.0 中文视频教程来啦
- linux java 环境配置_Linux开发环境配置——java
- matlab repmat_三行MATLAB实现动漫风格照片
- 高德API地名转化为坐标
- 保定工程技术学校网络计算机,保定工程技术学校2021年有哪些专业
- 计算机ppt实训报告总结,计算机实训总结模板
- ppt编辑数据链接文件不可用_拷过来的ppt不能编辑 - 卡饭网
- Android 深色模式适配
- 微信公众号迁移保持OPENID不变新老账户粉丝迁移问题
- android设计稿做ui px,苦逼APPUI设计师的标注切图的利器—PxCook
- 功率 dbm vrms vpp mw换算 (正弦波)
- 小码哥CRM项目(二)p20~p35
- ceph cluster client(RBD)
- Rhel5.8下载安最新版本的Python3
- 论坛报名 | 群体智能
- 拼多多的店铺怎样引流和出价-纽黑文教学
热门文章
- 使用navicat premium将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL
- 两队选手每队5人进行一对一的比赛(算法)
- EyeDropper 开发实践
- Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net...
- python3 入门 (四) 类与继承
- 《MonkeyRunner原理剖析》第九章-MonkeyImage实现原理 - 概览
- 时间管理——被忽视的重要理念!
- JQuery:DOM操作
- TableView的重要性
- 【OC语法快览】四、基础内存管理