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 屏幕解决方案相关推荐

  1. IOS开发之UI基础LOL英雄展示-15

    IOS开发之UI基础LOL英雄展示-15 // // ViewController.m // 15-英雄展示-单组数据 // // Created by 鲁军 on 2021/2/3. //#impo ...

  2. iOS开发之UI开发(UITableView)

    UITableView 继承自UIScrollView,性能极佳 UITableView的两种样式 UITableViewStylePlain列表样式 UITableViewStyleGrouped ...

  3. (0107)iOS开发之UI实时调试InjectionIII的使用

    AppStore : 下载:Injectionlll 下载地址 使用步骤: 1.设置InjectionIII 打开InjectionIII工具,选择Open Project,选择你的代码所在的路径,然 ...

  4. IOS开发之UI手势

    2019独角兽企业重金招聘Python工程师标准>>> 点击手势和双击手势 #import "TapViewController.h" @interface Ta ...

  5. (0103)iOS开发之Xcode 10 Error:Multiple commands produce问题及解决方案

    问题描述 从Github 上Down下来的demo,用Xcode(10.1)打开,Build一下报如下错误: Showing All Messages :-1: Multiple commands p ...

  6. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

  7. iOS开发之ARC(自动引用计数)

    iOS开发之ARC(自动引用计数) 英文原文:Automatic Reference Counting on iOS 参与翻译(4人): 纶巾客, showme, 李远超, 王宇龙 自动引用计数(AR ...

  8. (0045) iOS 开发之MBProgressHUD 源码学习

    (0045) iOS 开发之MBProgressHUD 源码学习 第一部分:学习所得和分析线程 1.  学习到了kvo 的使用 和屏幕方向的旋转判断. 2. 如果调起这个 HUD 的方法不是在主线程调 ...

  9. (0016)iOS 开发之Mac上Navicat Premium 创建远程连接和本地连接

    1.下载安装 (百度云盘里面有安装文件和注册机) 链接: https://pan.baidu.com/s/1kVG1k71 密码: mr5g 破解教程看这篇博客:http://blog.csdn.ne ...

最新文章

  1. [转]android之Apache Http——向服务器发送请求的同时发送参数
  2. 1003 Emergency (25 分)【Dijastra与DFS解法】
  3. Java中获取系统日期时间/系统时间
  4. 前端学习(1716):前端系列javascript之页面配置下
  5. ​全网首发,TensorFlow 2.0 中文视频教程来啦
  6. linux java 环境配置_Linux开发环境配置——java
  7. matlab repmat_三行MATLAB实现动漫风格照片
  8. 高德API地名转化为坐标
  9. 保定工程技术学校网络计算机,保定工程技术学校2021年有哪些专业
  10. 计算机ppt实训报告总结,计算机实训总结模板
  11. ppt编辑数据链接文件不可用_拷过来的ppt不能编辑 - 卡饭网
  12. Android 深色模式适配
  13. 微信公众号迁移保持OPENID不变新老账户粉丝迁移问题
  14. android设计稿做ui px,苦逼APPUI设计师的标注切图的利器—PxCook
  15. 功率 dbm vrms vpp mw换算 (正弦波)
  16. 小码哥CRM项目(二)p20~p35
  17. ceph cluster client(RBD)
  18. Rhel5.8下载安最新版本的Python3
  19. 论坛报名 | 群体智能
  20. 拼多多的店铺怎样引流和出价-纽黑文教学

热门文章

  1. 使用navicat premium将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL
  2. 两队选手每队5人进行一对一的比赛(算法)
  3. EyeDropper 开发实践
  4. Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net...
  5. python3 入门 (四) 类与继承
  6. 《MonkeyRunner原理剖析》第九章-MonkeyImage实现原理 - 概览
  7. 时间管理——被忽视的重要理念!
  8. JQuery:DOM操作
  9. TableView的重要性
  10. 【OC语法快览】四、基础内存管理