借鉴:
第一次发表博客,只是做一个尝试,对于问题的考虑真的不是特别全面,希望读到这篇博客的人能够给我指出问题一起进步,感谢曾经分享的人
由于我们的UI是以iphone5s为基准做的设计 ,我拿到设计图的时候,所有的 UI视图都是以 640 * 1136 来进行基础设计的 ,而且,我们的App只考虑 iphone端,而没有 ipad,那么就让我这个不习惯不喜欢而且也不太会autolayout的人有了可乘之机,我使用了按比率(iphone尺寸)布局.
首先我考虑的是iphone 设备的几个版本 iphone 4,4s ,5,5s ,6,6P
(图是网上找的,算不算侵权)
我们发现,4,5,6,6+的唯有高度不一样,那么我们就可以找到突破点了,根据设备高度写一个方法吧
if (IPhone4) {
else if (Iphone5){
else if (Iphone6){
else if (IPhone6P){
}
你突然发现,这样写是不是很失水准如果出了7了呢,可是这种方式 看着明白啊,尤其是像我这样的新手,看着明白啊,既然我们说的是按比例,那么我们就要按比例哦
先定义两个比例
@property float
@property float
定义好了,这俩比例怎么用呢? 当然是根据不同设备来赋值不同比例了,想想怎么做~~~~~~哦,根据屏幕高度来判断
if(kScreenHeight > 568){
self.autoX = kScreenWidth/320;
self.autoY = kScreenHeight/568;
}else{
self.autoX = 1.0;
self.autoY = 1.0;
}
好了,完事了,你会发现 4,5控件等比例,6,6p是放大的
那4,5怎么适配呢5的高度是568 ,4的高度是480,完了,假如一个控件在5上的frame 为(0,480,100,100),4上不就看不到了么
好吧,我承认,我也很纠结这个问题,可是我发现了,我们大部分控制器视图都是TableView ,所以不必计较哦,假如~~~~~~有一个控制器视图不是TableView,那么请这位码农同志在控制器视图上添加个ScrollView,再继续做
好吧,上代码了,不扯了,偷偷用了点上班时间,老板不会发现了吧!!!
.h文件
@interface LayOutManger : NSObject
//我是写成单例类哦,大家可以随自己高兴
+ (LayOutManger
@property float
@property float autoY;//y缩放比例
- (CGRect)WithX:(float)x
float)y
float)width
float)height;//替代CGRectMake(x,y,w,h)
- (float)WithX:(float)x;//替代x坐标
- (float)WithY:(float)y;//替代y坐标
- (float)WithWidth:(float)width;//替代宽度
- (float)WithHeight:(float)height;//替代高度
.m文件
- (CGRect)WithX:(float)x
float)y
float)width
float)height
{
self _layout];
CGRect
origin.x = x * self.autoX;
origin.y = y * self.autoY;
size.width = width * self.autoX;
size.height = height * self.autoY;
return
}
- (float)WithX:(float)x{
self _layout];
return x * self.autoX;
}
- (float)WithY:(float)y{
self _layout];
return y * self.autoY;
}
- (float)WithWidth:(float)width{
self _layout];
return width * self.autoX;
}
- (float)WithHeight:(float)height{
self _layout];
return height * self.autoY;
}
- (void)_layout{
if(kScreenHeight > 568){
self.autoX = kScreenWidth/320;
self.autoY = kScreenHeight/568;
else{
self.autoX = 1.0;
self.autoY = 1.0;
}
}
好吧,代码就这些了,不管写的如何,希望大家能够学习到东西,再次感谢原作者(思想我偷了一点,不会打我吧)
//.pch中哦
#define KCGRect(x,y,w,h) [[LayOutManger sharedInstance]WithX:x WithY:y WithWidth:w WithHeight:h]
#define KCGRectWithx(x) [[LayOutManger sharedInstance]WithX:x]
#define KCGRectWithy(y) [[LayOutManger sharedInstance]WithY:y]
#define KCGRectWithwidth(width) [[LayOutManger sharedInstance]WithWidth:width]
#define KCGRectWithheight(height) [[LayOutManger sharedInstance]WithHeight:height]
KCGRect(x,y,w,h) 替代了CGRectMake....