ios 代码设置控件宽高比_iOS基于代码按比例约束方法进行屏幕适配
还记得刚刚开始学习iOS的开发的时候,简简单单的小控件练习,我总是习惯性的写死Frame,后来知道了屏幕适配,添加约束这样才能使UI更好的展示在屏幕上,Objective-C中的Masonry,Swift中的SnapKit,以及Xib和Storyboard的AutoLayout加上SizeClasses的组合,都极大程度上的帮助我们做屏幕的适配约束。
推荐一下很精彩的博客 --- 很详解并表达自己观点非常棒的博客。
今天突然间就有了个想法,那么我是否可以基于一种屏幕的尺寸,通过写死Frame然后通过某些捷径的方法进行屏幕的比例约束适配呢?
1 首先这种方法不适合ipad开发,只适用于手机(4 5 6 系列)
2 这种方法并不推荐,因为现在有很多流行合理的适配方法,但是嘛,做开发,有时候可以自己嗨一下嘛,做出来也是好样的
3 只是非常简单的按比例兼容。只要每张图都有@1x,@2x,@3x的话,该方法完全不会让图片模糊或者变形,能还原出设计师的最初稿
4 由于iphone不同系列屏幕宽高比都是相差无几的,所以按照比例约束适配的方法绝对是可行的
首先,我们可以以iphone5(320 * 568)为最初设计机型,然后以iphone5系列为模板,进行比例的放大或者缩小。
//获取device的屏幕宽高
#define MainScreenWidth [[UIScreen mainScreen]bounds].size.width
#define MainScreenHeight [[UIScreen mainScreen]bounds].size.height
//以iphone5,5s,5c为基本机型,其他型号机器按比例系数做乘法.
AppDelegate *appdelegate = [UIApplication sharedApplication].delegate;
appdelegate.autoSizeScaleX = MainScreenWidth/320.f;
appdelegate.autoSizeScaleY = MainScreenWidth/568.f;
我们获得了屏幕的宽高的比例系数之后,在创建我们一些控件的时候,就可以进行按比例适配了
AppDelegate *apd = [UIApplication sharedApplication].delegate;
UIButton *loginBtn = [[UIButton alloc]initWithFrame:CGRectMake(10*apd.autoSizeScaleX, 20*apd.autoSizeScaleY, (320-10*2)*apd.autoSizeScaleX, 44*apd.autoSizeScaleY)];
[loginBtn setTitle:@"login" forState:UIControlStateNormal];
[loginBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[loginBtn.titleLabel setFont:[UIFont systemFontOfSize:14]];
[loginBtn setBackgroundColor:[UIColor cyanColor]];
[self.view addSubview:loginBtn];
这样就有个问题,那么每个View上的控件,我们都需要重新设置下frame,这样的代码量以及维护都特别艰难,我们可以考虑封装下,来进行整个项目的适配~~
首先我们创建一个工具类来进行比例约束适配方法的封装
屏幕快照 2016-06-29 下午5.40.50.png
屏幕快照 2016-06-29 下午5.41.03.png
屏幕快照 2016-06-29 下午5.41.16.png
图上很清楚的说明,首先工具类AutoFillScreenutils调用类方将需要进行按比例约束的view当做参数传递进来,通过遍历的方式来重新设置一遍Frame,如果你的view层级很高的话,可以多进行几遍遍历。
(void)autoLayoutFillScreen:(UIView *)view
(CGRect)updateViewsFrame:(CGFloat) x withY:(CGFloat) y AndWidth:(CGFloat) width AndHeight:(CGFloat) height
然后在ViewController中,将View当做参数传递过去即可。
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor lightGrayColor];
[self setUpViews];
[AtuoFillScreenUtils autoLayoutFillScreen:self.view];
// Do any additional setup after loading the view, typically from a nib.
}
我们通过测试就可以发现,原来在iphone5系列上布局正常的图,到iphone6及iphone6+上就变形了,通过我们的按比例约束,又重新适配了,不得不说这样还是蛮简单的。
Paste_Image.png
Paste_Image.png
Demo已经上传到Github,有兴趣的可以看一下,很简单一个小东西,也是不断学习过程中的一个小经验,不喜勿喷,谢谢啦~
ios 代码设置控件宽高比_iOS基于代码按比例约束方法进行屏幕适配相关推荐
- ios 代码设置控件宽高比_IOS开发入门之iOS一套代码适配所有iPhone手机布局实现方案...
本文将带你了解IOS开发入门iOS一套代码适配所有iPhone手机布局实现方案,希望本文对大家学IOS有所帮助. iOS一套代码适配所有iPhone手机布局实现方案 本文主要是讲述一套代码适配所有iP ...
- ios 代码设置控件宽高比_#iOS 开发实用技巧# Masonry 控件宽高(不同控件之间宽高比)比设置方法...
Masonry 项目中我们实用 Masonry 自动布局,可能需要设置控件的宽高比,需要记录一下这个方法. 一句代码搞定: 注意这里需要设置的是控件的宽高比. make.width.equalTo(s ...
- ios 代码设置控件宽高比_iOS--利用比例纯代码适配屏幕大小
首先说下让自己的程序支持iPhone6和6+,第一种使用官方提供的launch screen.xib,这个直接看官方文档即可,这里不再多述:第二种方法是和之前iPhone5的类似,比较简单,为iPho ...
- ios 代码设置控件宽高比_用宽高比调整UIImage的大小?
我知道这很老了,但是感谢那篇文章-它使我从尝试使用比例尺重定向到绘制图像.万一对任何人都有利,我做了一个扩展类,我将在这里进行介绍.它允许您调整图像的大小,如下所示: UIImage imgNew = ...
- ios 代码设置控件宽高比_ios-自动布局以保持视图大小比例
我正在努力实现以下目标: 我的xib中有2个视图,需要使边缘(两侧和顶部)保持20像素 需要调整大小的2个视图的大小不同 它们必须相隔20像素 它们的宽度需要相对于父视图的宽度保持不变 我阅读了有关执 ...
- android设置屏幕高度和宽度设置,Android手机的屏幕宽高度和代码设置控件的宽高度...
1.Android手机的屏幕宽高度 WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); int w ...
- Android动态设置控件宽高和padding
在开发过程中我们经常需要动态设置控件的宽高和padding.以TextView为例.如下: 布局代码 TextView的默认宽高为包裹文字,添加了一个背景颜色设置参数后更直观看到效果 <?xml ...
- 动态获取手机屏幕宽高及动态设置控件宽高
1.获取手机屏幕宽高: DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetr ...
- html设置控件位置大小,下面那个代码段设置myButton控件显示在HTML页左上角100px的位置 - 问答库...
问题: [多选] 下面那个代码段设置myButton控件显示在HTML页左上角100px的位置?() A . B . C . D . 调度例行会议形式有什么() 生产平衡会. 事故分析会. 调度专业会 ...
最新文章
- 计算机科学之前说,国内计算机科学十强大学是哪些?前2名没悬念,后面几所都不好说...
- 行号 设置vim_在VSCode里面配置Vim正确姿势(细节解析)
- Leetcode: Counting Bits
- IdHTTP1.Get(url)得到的源码怎么跟直接浏览的不一样呢?
- 揭秘Facebook官方底层C++函数Folly
- 源码安装redis-3.2.11
- 我不断收到“ Uncaught SyntaxError:意外令牌o”
- Perforce-Server迁移
- 多多客接入(拼多多)
- win10+Vs2019编译PCL中Kinfu-largescale
- 立体匹配(Stereo Matching)
- GPS同步时钟(NTP时间服务器)网口物理隔离的好处
- phpstyudy端口被占用怎么办
- HI3516DV300 GPIO操作
- B数和B+树、红黑树数据结构的特点
- spark基础知识学习
- UE4如何使用Left Shift+W增加移动速度
- 远程连接服务器(免密登录,ssh协议22号端口),web服务器:URL格式,http协议,http请求常用的方法(get和post)
- Spring 5 + Spring MVC 5 + MyBatis 3 的 Maven 项目集成
- linux中各目录的意思,linux各个目录的意思?
热门文章
- 01 离散时间信号的时域表示
- 输入 3 个正数,判断能否构成一个三角形
- 错误记录 MongoClient opened before fork. Create MongoClient
- linux 从一台服务器向另台服务器复制文件
- C++对象数组与对象指针的用法【C++初学面向对象编程】
- 模拟电子技术不挂科学习笔记1(半导体基础、二极管)
- Python稳基修炼的经典案例4(计算机二级、初学者必须掌握的例题)
- 如何用r压缩列联表_压缩袋好用吗?哪个牌子比较好?如何选择真空压缩袋?羽绒服能用真空压缩袋吗?...
- Python使用numpy和pandas模拟转盘抽奖游戏
- python比较文件每行长度_读取文件并查找所有行的长度是否相同